Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Обсуждение MT7688AN HLK-7688A

Тема в разделе "Другие WiFi модули и оборудование", создана пользователем aloika, 11 ноя 2017.

  1. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    Список поддерживаемых Flash: MediaTek-Labs/linkit-smart-7688-uboot

    Всё у них решается путем #ifdef ADDR_4B :)
     
  2. Алексей.

    Алексей. Авторитетный участник сообщества

    Сообщения:
    555
    Симпатии:
    64
    На линкит смарт получил
    0x00146146
    Отличается только chip_mode ну и bs_shadow соответственно
    011: Boot from XTAL (boot from SPI 4-Byte ADR)
     
  3. sharikov

    sharikov Авторитетный участник сообщества

    Сообщения:
    596
    Симпатии:
    52
    У меня
    io -4 0x10000010
    10000010: 00156146

    HLK7688 аппаратно задан 4-х байтный режим.
     
  4. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    Я пока этот кошмар пытался разгрести MediaTek-Labs/linkit-smart-7688-uboot
    Не совпадает с HLK и надо исправлять минимум в 3-х местах:
    • Номер UART в board\rt2880\serial.h #define CFG_RT2880_CONSOLE
    • Скорость UART в include\configs\rt2880.h #define CONFIG_BAUDRATE желательно в 115200, #define CONFIG_SERVERIP на желаемые и т.д.
    • Установки регистров в lib_mips\board.c связанные с GPIOMODE2 и прочим. Найти можно по поиску слова "ARDUINO"
    Ещё не работает tftp.
    Не правильно работают светодиоды, но это исправляется в lib_mips\board.c (связанные с GPIOMODE2).
    Для платы HLK-7688A-SUIT-V1.3 надо провести кнопку gpio 38 PAD_WDT_RST_N
    Так-же на ней нет транса для ethernet - разъем RJ45 припаян напрямую к модулю через конденсаторы и резисторы :) Т.е. возможно использовать только для отладки с коротким шнуром сопряжения - развязки нет...
    Ну и вообще этот Linkit-smart-7688-boot - хуже моей web-свалки. Мешанина с кучей ненужного и неиспользуемого кода который дает только доп. глюки и неразбериху. Удивляет, что это ещё как-то работает....
    При зашивке напрямую, без редакции загрузка OpenWRT с ним на HLK будет, но стартовый лог на другом UART...
     
  5. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    U-boot, который был в модуле отличается от Linkit-smart-7688-boot размером - раза в полтора меньше, но mtd отведена на 3*64KiB и туда лезет любой из клонов Linkit-smart-7688-boot (можно наверно от Omega2 попробовать, но там неинтересные опции).
    В общем простого HTTP в них нет, с usb и с SD карты не грузятся (много кривости), tftp глючный, опции (env) для галочки - не работают... Работает только UART загрузка и на 57600 :)
    Необходимо писать свой или взять какой нормальный. Для себя потом перепишу старенький но со всеми перечисленными возможностями и укладывающийся в 128 килобайт...
     
  6. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    Итоги по клонам Linkit-smart-7688-boot - не годятся для пром.применения и жирная точка.
    Jtag отключают. GPIO не настроить, не отключить вывод UART, сбивают все GPIO настройки, отладку не произвести, перезалить что в полевых условиях невозможно и т.д. Единственное от них - занимают 192 килобайта и как-то, раз на раз, загружают образ kernel...
     
  7. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    Кто знает, как это работает? MediaTek-Labs/linkit-smart-7688-uboot :)
    Код (C):
    1. void smart7688_led_blink(void)
    2. {
    3.     if (smart7688_led_state) {
    4.         RALINK_REG(RALINK_PIO_BASE+PIO_SET1) |= (1 << 12);
    5.         smart7688_led_state = 0;
    6.     } else {
    7.         RALINK_REG(RALINK_PIO_BASE+PIO_CLEAR1) |= (1 << 12);
    8.         smart7688_led_state = 1;
    9.     }
    10. }
    Если чтение этих регистров RALINK_REG(RALINK_PIO_BASE+PIO_SET1) или RALINK_REG(RALINK_PIO_BASE+PIO_CLEAR1) всегда дает 0xFFFFFFF.
    Код (Text):
    1. MT7628 # md 10000600
    2. 10000600: 00000800 00001000 00000000 ffffffff    ................
    3. 10000610: 00000000 00000000 00000000 ffffffff    ................
    4. 10000620: ff203470 0000705f 00000000 ffffffff    p4 ._p..........
    5. 10000630: ffffffff ffffffff ffffffff ffffffff    ................
    6. 10000640: ffffffff ffffffff ffffffff ffffffff    ................
    7. 10000650: 00000000 00000000 00000000 ffffffff    ................
    8. 10000660: 00000000 00000000 00000000 ffffffff    ................
    9. 10000670: 00000000 00000000 00000000 ffffffff    ................
    10. 10000680: 00000000 00000000 00000000 ffffffff    ................
    11. 10000690: 00000000 00000000 00000000 ffffffff    ................
    12. 100006a0: 00000000 00000000 00000000 ffffffff    ................
    13.  
    Ардуинщики писали?
    И так там везде....
     
  8. Алексей.

    Алексей. Авторитетный участник сообщества

    Сообщения:
    555
    Симпатии:
    64
    На linkit smart решили использовать console=ttyS2,57600 это их выбор, что в этом плохого не ясно.
    Что касается режимов gpio то тут всё очевидно, linkit smart работает в "Device Mode", а hilink в "Gateway Mode", т.е. те пины которые шарятся с LAN портами работают иначе. Для режима роутера они аналоговые, а для режима девайса - цифровые ;)
    Начальный загрузчик предназначен для разворачивания образа прошивки и для аварийного восстановления. Т.е. уметь работать с установленным флешем и для аварийного восстановления с lan-ом, что касается восстановления с usb - это скорее недостаток чем преимущество, его нужно куда-то выводить, а порт ethernet хотя бы один всегда выведен.
    В полях полученный образ прошивки или отдельных пакетов меняется, обязательно в момент обновления обеспечить гарантированным электропитанием. Менять начальные загрузчики, например для оптимизации старта, в устройствах, работающих в режиме 24/7 думаю нет большого смысла.
     
  9. Алексей.

    Алексей. Авторитетный участник сообщества

    Сообщения:
    555
    Симпатии:
    64
    А что вы хотели там увидеть?
    Эти регистры предназначены для записи (установки) битов
    10000630 | GPIO_DSET_0 | GPIO0 to GPIO31 data set register These data set registers are used to set bits in the GPIO_DATA_x registers.
    Для сброса битов используются другие регистры
    10000640 | GPIO_DCLR_0 | GPIO0 to GPIO31 data clear register These data set registers are used to clear bits in the GPIO_DATA_x registers.
    А для чтения состояния используются третьи регистры :)
    10000620 | GPIO_DATA_0 | GPIO0 to GPIO31 data register These data registers store current GPIO data value for GPIO input mode, or output driven value for GPIO output mode. Bit position stand for correspondent GPIO pin.
    Код (Text):
    1. static void* _map_base = (void *) -1;
    2.  
    3. static inline void set_gpio_direction(int num, int is_output) {
    4.         uint32_t v = *((volatile uint32_t*) (_map_base + GPIO_CTRL_0));
    5.         *((volatile uint32_t*) (_map_base + GPIO_CTRL_0)) = is_output ? (v | (1 << num)) : (v & ~(1 << num));
    6. }
    7.  
    8. static inline void set_gpio_value(int num, uint32_t value) {
    9.         if (value) {
    10.                 *(volatile uint32_t*) (_map_base + GPIO_DSET_0) = (uint32_t)(1 << num);
    11.         } else {
    12.                 *(volatile uint32_t*) (_map_base + GPIO_DCLR_0) = (uint32_t)(1 << num);
    13.         }
    14. }
    15.  
    16. static inline uint32_t get_gpio_value(int num) {
    17.         uint32_t v = *((volatile uint32_t*) (_map_base + GPIO_DATA_0));
    18.         return v & (1 << num);
    19. }
     
  10. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    Знак "=", а не "|=".
    В итоге, в коде от Linkit, получаем RALINK_REG(RALINK_PIO_BASE+PIO_SET1) = 0xFFFFFFFF;
    Т.е. выставить ВСЕ биты :)
    У Onion (Omega2/p) в Uboot таких ошибок нет.
     
  11. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    Тормозит загрузка и работа, а так более ничего :)
    Смысл во всём есть, если модуль "сочленен" с другим MCU и/или, к примеру, используются все UART. Иногда приходится глушить вывод в UART и доступа к boot через него нет и не возможен. Городить дополнительные кнопки, разъемы и прочее для переключения режимов boot так-же не имеет смысла.
    Основные причины, почему требуется перепрошивка всего на свете - разгильдяйство сервисного обслуживания. Прошьют что не так при смене каких датчиков и кирдык = менять плату = вторичная командировка и длительный простой. Запасную плату тоже могут не взять, т.к. всё образуется "находу" - ехали сменить что-то другое, но полезли не туда :) ...
     
  12. sharikov

    sharikov Авторитетный участник сообщества

    Сообщения:
    596
    Симпатии:
    52
    Я перепиливал загрузчик от Widora, перепиливать прилично
    widora/u-boot-mt7688
    ветка 32M4B
     
  13. Алексей.

    Алексей. Авторитетный участник сообщества

    Сообщения:
    555
    Симпатии:
    64
    Для меня было большим разочарованием SPI
    Количество битов для приема/передачи в half-duplex 0-256 и для full-duplex 0-128
    Т.е. за транзакцию больше 32 или 16 байт не передать.
    Я то думал, dma настрою и буду килобайтами обмениваться, а тут облом.
     
  14. sharikov

    sharikov Авторитетный участник сообщества

    Сообщения:
    596
    Симпатии:
    52
    А для меня разочарованием было обнаружить что штатный драйвер I2C не поддерживает Repeated start. Без него сенсор не работает. Хорошо что нашелся альтернативный драйвер.
    И еще разочаровала дохлая нагрузочная способность выводов I2C. Подтяжку 3К уже еле тянет (ноль поднимается).
     
  15. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    @Алексей. - не в курсе, есть какой пакет "или как", чтобы из помойки дистра OpenWRT создать чистый SDK только для конкретного железа и конкретных пакетов (выкинуть лишний хлам и оставить только нужные исходники пакетов)?
     
  16. sharikov

    sharikov Авторитетный участник сообщества

    Сообщения:
    596
    Симпатии:
    52
    При таких "работниках" вам MT7688 противопоказан. В этом процессоре нет boot rom и если ему убили загрузчик остается только шить флэшку программатором. (в плате обязательно нужно предусмотреть разъем для прошивки).
    Вам нужен чип который из состояния "кирпич" шьется по usb .
    Для нас это тоже был одним из пунктов против MT*.
     
  17. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    Для I2C, SPI и т.д. есть драйверы-удлинители с диф.сигналами - хоть на 100 метров...
    C Repeated start проблем не заметил (они вроде были на начальном освоении этих чипов "сообществом"), а сам контроллер I2C в MT7688A - ужасно примитивен - требует много от CPU и не пашет на МГц-ы.
     
  18. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    Это решается проще: В доке напишу - всегда возить с собой запасной блок. И псё - не взяли -= премия. :)
     
  19. Алексей.

    Алексей. Авторитетный участник сообщества

    Сообщения:
    555
    Симпатии:
    64
    В menuconfig вы сами выбираете те пакеты, которые хотите видеть на прошивке.
    Осталось разобраться что лишнее и выкинуть.
    Что такое "для конкретного железа" не ясно, например я собрал из медиатека флешки и рам-а (ну и smd резисторы конденсаторы и стекляшка) свой контроллер, это конкретное железо или нет?
     
  20. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.961
    Симпатии:
    1.300
    init_baudrate() - не инит, а использует фиксед.
    И зачем это? widora/u-boot-mt7688
    Если widora/u-boot-mt7688 ?
     

Поделиться этой страницей