• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Модуль BW16 (RTL8720DN)

BublikoFF

New member
Здравствуйте! что то я не догоняю.. скачал с сайта амебы sdk... https://github.com/ambiot/ambz2_sdk но так и не понял, как из под нее работать с блютусом? упоминаний про блютус в сдк не нашел. в общем то и про wifi 5Ггц, тоже в одном месте только упоминается.. видимо все на номерах каналов работает... а с блютусом прям беда.. или хотя бы ткните носом в документацию, как например у STM с описанием регистров.... я что то не могу найти такой на просторах гугла
 

pvvx

Активный участник сообщества
Амеба не считает нужным выкладывать полноценные SDK всем подряд. Куцая поддержка BLE от Ameba есть только в Ameba Arduino.
Источники более полных SDK указаны в темах про RTL827xDx ранее...
 

pvvx

Активный участник сообщества
На сегодня выходит, что полноценный USB2.0 Hi speed есть только в модулях с RTL872x?
В BW16, с чипа RTL8720DN, USB выводы 29 (PA26-USB_DP) и 30 (PA25-USB_DM) выведены, но нарисованный на схеме (и плате) резистор на 12 кОм от ноги 28 (PA28-USB_REF) к GND, не установлен!
Жадные китайцы пожалели SMD резистор 👹 и в таком варианте USB не работает. Необходимо снимать крышку модуля и паять резистор - тогда все USB примеры из SDK работают...
 
  • Like
Реакции: wowa

wowa

New member
В BW16, с чипа RTL8720DN, USB выводы 29 (PA26-USB_DP) и 30 (PA25-USB_DM) выведены, но нарисованный на схеме (и плате) резистор на 12 кОм от ноги 28 (PA28-USB_REF) к GND, не установлен!
Жадные китайцы пожалели SMD резистор 👹 и в таком варианте USB не работает. Необходимо снимать крышку модуля и паять резистор - тогда все USB примеры из SDK работают...
Здравствуйте! Пытаюсь заставить работать usbd_vendor, вы его тоже проверяли, что он работает? Там ведь надо два устройства по идее прошивать и соединять. У меня просто что-то неизвестных многовато - работаю под Win+IAR, seeed sdk там как-то криво строится - не может залить образ в конце, а родной sdk заливается нормально, но когда перетащил туда этот пример (usbd_vendor), там usb_init() тупо возвращает -1, и фиг знает, что это значит, там все в либе, непонятно, как диагностику получить. Может, либу эту просто так из seeed-sdk нельзя брать. Прям хоть Убунту раскочегаривай из-за этого...
 

pvvx

Активный участник сообщества
Пытаюсь заставить работать usbd_vendor
seeed-ambd-sdk\component\common\example\usbd_vendor\readme.txt
Код:
Руководство по установке
~~~~~~~~~~~
        Для успешного запуска этого приложения необходимо подтвердить настройку оборудования, прежде чем двигаться дальше.
        1. Подключите плату разработки Ameba к USB-узлу поставщика Ameba (работает приложение usbh_vendor).
        2. Для среды GCC введите команду make menuconfig и выберите CONFIG USB => Enable USB => USB OTG Type =>
           USB_OTG_DEVICE_MODE, а затем выберите Тип устройства USB => USB_DEVICE_VENDOR,
           это автоматически сгенерирует следующие строки в platform_autoconf.h:
               # определить CONFIG_USB_OTG_EN 1
               #define CONFIG_USB_DEVICE_EN 1
               # определить CONFIG_USBD_VENDOR 1
           А для среды IAR вручную отредактируйте platform_autoconf.h, как указано выше.
        3. Убедитесь, что пример USBD VENDOR включен (по умолчанию включен, только если определен CONFIG_USBD_VENDOR) в файле platform_opts.h:
               #если определено(CONFIG_USBD_VENDOR)
               #define CONFIG_EXAMPLE_USBD_VENDOR 1
               #endif
        4. Пересоберите проект и загрузите прошивку на плату разработки Ameba.
        5. Сбросьте настройки и проверьте журнал через последовательную консоль.
Эти действия сделали (включили USB в platform_autoconf.h для IAR)?

Патч на seeed-ambd-sdk ставили, чтобы работало с UART, а не c SPI и подобное (иначе это реализация исключительно для seeed варианта модуля к их системе)?
> Прям хоть Убунту раскочегаривай из-за этого...
WSL под Windows.
У меня такой патч:
 

Вложения

  • Like
Реакции: wowa

wowa

New member
Скорее всего инициализации USB и не будет, если не припаян резистор на 12 кОм от ноги 28 (PA28-USB_REF) к GND.
Ну да, забыл написать - конечно, тему я прочитал, все это сделал, и резистор, и дефайны. Без дефайнов там же и кода не было бы этого.
А вот как проверить, что резистор правильно получилось поставить - непонятно. Там же блин размеры эти микронные... Т.е. инит может именно из-за него не проходить?
 

wowa

New member
seeed-ambd-sdk\component\common\example\usbd_vendor\readme.txt
Код:
Руководство по установке
~~~~~~~~~~~
        Для успешного запуска этого приложения необходимо подтвердить настройку оборудования, прежде чем двигаться дальше.
        1. Подключите плату разработки Ameba к USB-узлу поставщика Ameba (работает приложение usbh_vendor).
        2. Для среды GCC введите команду make menuconfig и выберите CONFIG USB => Enable USB => USB OTG Type =>
           USB_OTG_DEVICE_MODE, а затем выберите Тип устройства USB => USB_DEVICE_VENDOR,
           это автоматически сгенерирует следующие строки в platform_autoconf.h:
               # определить CONFIG_USB_OTG_EN 1
               #define CONFIG_USB_DEVICE_EN 1
               # определить CONFIG_USBD_VENDOR 1
           А для среды IAR вручную отредактируйте platform_autoconf.h, как указано выше.
        3. Убедитесь, что пример USBD VENDOR включен (по умолчанию включен, только если определен CONFIG_USBD_VENDOR) в файле platform_opts.h:
               #если определено(CONFIG_USBD_VENDOR)
               #define CONFIG_EXAMPLE_USBD_VENDOR 1
               #endif
        4. Пересоберите проект и загрузите прошивку на плату разработки Ameba.
        5. Сбросьте настройки и проверьте журнал через последовательную консоль.
Эти действия сделали (включили USB в platform_autoconf.h для IAR)?

Патч на seeed-ambd-sdk ставили, чтобы работало с UART, а не c SPI и подобное (иначе это реализация исключительно для seeed варианта модуля к их системе)?
> Прям хоть Убунту раскочегаривай из-за этого...
WSL под Windows.
У меня такой патч:
Да, спасибо, патч конечно тоже видел, но если говорить про винду, то там до сути дело не доходит - почему-то иар вообще неправильный образ генерит, какого-то бессмысленно громадного размера, он не может закачаться во флеш. В родном сдк норм собирается, а в сидовском что-то они наверно на эту ветку подзабили и давно сами не строились под иаром, там и файлов в ней пары не хватало, пришлось из родного взять.

Вчера начал пробовать на убунте [да, про wsl чёто забыл:); но у меня машина есть, ничего], патч конечно применил, но застрял на том, что там у вас тулчейн другой оказался, не сразу понял, почему не запускалась сборка, а потом уже поздно было. В пнд продолжу. Спасибо вам, что делитесь, хоть понятно, что это можно сделать, а то так вообще не поймешь, стоит ли копать).
 

pvvx

Активный участник сообщества
Т.е. инит может именно из-за него не проходить?
Не пробовал без резистора.
С резистором собирается и работает и пример в Arduino - USBCDCSerial. Но надо убрать в
C:\Users\имя\AppData\Local\Arduino15\packages\realtek\hardware\AmebaD\3.1.4\libraries\USB\src\USBCDCDevice.h и USBHIDDevice.h
Код:
#if 0 //def BOARD_RTL8720DN_BW16
    #error "USB functionality is not supported on BW16 development board"
#endif
Но не запишется их утилитой на всех USB-UART. Нужна поддерживающая 1500000 Buad или заменить upload_image_tool_windows.exe из
или изменить скорость в C:\Users\имя\AppData\Local\Arduino15\packages\realtek\hardware\AmebaD\3.1.4\platform.txt в строке с tools.ameba_d_tools.upload.pattern.windows=
 
  • Like
Реакции: wowa

pvvx

Активный участник сообщества
а то так вообще не поймешь, стоит ли копать).
Проверить можно записав какую прошивку с USB.
Для вас откопал какой-то свой старый тест (сама прошивка) - в нем fw с USB-COM-ECHO, писал на RTL8722DM, но работает и в BW16.
В UART при инициализации пишет:
#calibration_ok:[2:19:11]
#
USBD CDC ACM demo started
USB ATTACHED
- при подключении разъема USB.

tstecho4k.bat выдает:
Код:
> python3 DevEchoCDCTstTxRx.py -p COM6 -c 5000 4095 4095
USB Echo Utility version 20.10.19
Start 5000 cycles Tx 4095 -> Rx 4095
----------------------------
  Time: 4.427 sec
Cycles: 5000 (transactions)
Writes: 20475000 Bytes
 Reads: 20475000 Bytes
OldBlk: 55 aa 0fff 1387 ..
----------------------------
IO Speed: 9033.330 KBytes/s
 

Вложения

  • Like
Реакции: wowa

wowa

New member
Проверить можно записав какую прошивку с USB.
Для вас откопал какой-то свой старый тест (сама прошивка) - в нем fw с USB-COM-ECHO, писал на RTL8722DM, но работает и в BW16.
В UART при инициализации пишет: ...
О, спасибо большое, в пнд попробую, да, это то что нужно!

По поводу скорости - так-то у меня и иар, и этот их ImageTool грузят нормально под виндой, и приложения работают, в log_uart всё пишут, с этим проблемы нет. Там именно образ кривой получается в seeed-sdk под иаром, у них же там туча каких-то оберточных шагов при построении, перепаковки жуткие, и на выходе именно размер образа левый, это видно, когда он грузит уже, вылетает за размер флеша.
 

wowa

New member
Для вас откопал какой-то свой старый тест...
Спасибо большое за прошивку! Действительно оказалось, что резистор не допаяли - пока не перепаяли, она давала такую же ошибку, типа USBD failed to initialize. Потом, правда, был еще глюк, что пока было всё на макетке, винда не могла нормально usb устройство распознать, но когда usb-разъем припаяли прямыми проводами, теперь ваш тест отлично работает. Дает немного меньше, чем у вас, 7800 кБ/с, но это уже мелочи.

Если залить моё приложение, USBD_VENDOR example, собранное в иаре, то теперь устройство в винде тоже определяется как vendor device, наверно zadig'ом надо стд драйвер поставить и через libusb можно работать. Оч интересно, какая скорость реально будет.

Кстати, оч удобный скриптик у вас на питоне для загрузки). Правда, он отказался грузить некоторые iar-овские boot-образы, похоже, ему надо, чтобы размер образа был кратен 4:
Код:
F:\HW\Ameba\ambd_sdk-dev\project\realtek_amebaD_va0_example\EWARM-RELEASE\Debug\Exe>python rtltool.py -p COM6 -b 1500000 wf 0x4000 km4_image\km4_boot_all.bin                                                             Connecting...
Set baudrate 1500000
Erase Flash 2 sectors, data from 0x00004000 to 0x00006000
Write Flash data 0x08004000 to 0x080051ea from file: km4_image\km4_boot_all.bin                               Traceback (most recent call last):
File "F:\HW\Ameba\ambd_sdk-dev\project\realtek_amebaD_va0_example\EWARM-RELEASE\Debug\Exe\rtltool.py", line 554, in <module>                                                                                                  crc = rtl.calc_checksum32(data)
File "F:\HW\Ameba\ambd_sdk-dev\project\realtek_amebaD_va0_example\EWARM-RELEASE\Debug\Exe\rtltool.py", line 296, in calc_checksum32                                                                                           self.chk32 = sum(np.frombuffer(data, dtype='<u4') + self.chk32) & 0xffffffff                             ValueError: buffer size must be a multiple of element size
Но это мелочи, конечно. В общем, пока неплохо, спасибо еще раз!
 

wowa

New member
Странно, что здесь нельзя редактировать через 5 мин. Там с форматированием проблема была, должно выглядеть так:
Код:
F:\HW\Ameba\ambd_sdk-dev\project\realtek_amebaD_va0_example\EWARM-RELEASE\Debug\Exe>python rtltool.py -p COM6 -b 1500000 wf 0x4000 km4_image\km4_boot_all.bin                                                             Connecting...
Set baudrate 1500000
Erase Flash 2 sectors, data from 0x00004000 to 0x00006000
Write Flash data 0x08004000 to 0x080051ea from file: km4_image\km4_boot_all.bin
Traceback (most recent call last):
File "F:\HW\Ameba\ambd_sdk-dev\project\realtek_amebaD_va0_example\EWARM-RELEASE\Debug\Exe\rtltool.py", line 554, in <module>
    crc = rtl.calc_checksum32(data)
File "F:\HW\Ameba\ambd_sdk-dev\project\realtek_amebaD_va0_example\EWARM-RELEASE\Debug\Exe\rtltool.py", line 296, in calc_checksum32self.chk32 = sum(np.frombuffer(data, dtype='<u4') + self.chk32) & 0xffffffff
ValueError: buffer size must be a multiple of element size
 

pvvx

Активный участник сообщества
Кстати, оч удобный скриптик у вас на питоне для загрузки). Правда, он отказался грузить некоторые iar-овские boot-образы, похоже, ему надо, чтобы размер образа был кратен 4:
Скрипт не дописан - давно делал для RTL8272DM и забросил. При вашем вопросе его поднял, что-то добавил чтобы работал с BW16 (для кинутой прошивки теста)... Когда допишу полностью - скину в github.
 
  • Like
Реакции: wowa

wowa

New member
Скрипт не дописан - давно делал для RTL8272DM и забросил. При вашем вопросе его поднял, что-то добавил чтобы работал с BW16 (для кинутой прошивки теста)... Когда допишу полностью - скину в github.
Безусловно полезная вещь, кто понимает, а то в их гуишный лоудер пока все имена выберешь, а для др. проекта все снова здорово...
 

wowa

New member
Оставлю свои 5 коп. Сделал тесты на bulk транзакциях (на базе seeed-овского sdk, но usb-пример, перенесенный в родной sdk, собранный под IAR), непрерывная передача блоками от устройства к хосту с 16-байтными квитанциями обратно:

Код:
BlkSz МБ/с  Мб/с
8000  10     80 
4000   6.5   53
1000   2.5   20
 100   0.39   3
Блоки 8300 б не передаются - видно, блок для передачи в sdk не м.б. больше 8192 байт.
Если убрать квитанцию и тупо гнать передачу из устройства в хост:
Код:
BlkSz МБ/с   Мб/с
8000  15.6   125
4000  10.6    85
1000   3.7    30
 100   0.78    6
Из более мелкой градации по соотношению размера блока/скорости мне показалось, что передача внизу идет блоками по 4Кб, отсюда эта разница в 1.5 раза на 8Кб блоках - типа обратно 16-байтная квитанция идет в 4К-блоке и занимает половину полосы. В общем, как и следовало ожидать, 480 Мб/с - это, конечно, теория). Хотя остается еще изохронный канал, где вроде теоретически может быть побыстрее, но там целостность надо самому держать, это вообще занятие на любителя...
 

pvvx

Активный участник сообщества
В общем, как и следовало ожидать, 480 Мб/с - это, конечно, теория).
Как показала практика - на разных USB контроллерах на мамках (от CPU или от чипсета и т.д.) разная предельная скорость. Иногда различия достаточно большие. А скорость падает по причине невозможности прокачки непрерывного потока. Постоянно возникают какие-то паузы в приеме-передаче. И конечное устройство тут не при чем.
И зависимость такая - чем системная плата и CPU старее - тем меньше пропусков и скорость выше. Производители наверно забили на оптимизацию дров USB2.0 и аппаратной реализации.
 

pvvx

Активный участник сообщества
Это хорошо показывает и логические анализаторы на CY7C68013A. Для получения его номинальной максимальной скорости необходимо искать более "правильный" порт USB торчайщий из современных PC. C USB3.2+ чаше всего хуже - не достигает номинала...
 

pvvx

Активный участник сообщества
И ныне схема построения USB – на одном концентраторе сидит к 30 портам. Весь поток (опрос) и распределен между этими устройствами. Измерение скорости бьет от замера к замеру...
 

wowa

New member
Как показала практика - на разных USB контроллерах на мамках (от CPU или от чипсета и т.д.) разная предельная скорость. Иногда различия достаточно большие. А скорость падает по причине невозможности прокачки непрерывного потока. Постоянно возникают какие-то паузы в приеме-передаче. И конечное устройство тут не при чем.
И зависимость такая - чем системная плата и CPU старее - тем меньше пропусков и скорость выше. Производители наверно забили на оптимизацию дров USB2.0 и аппаратной реализации.
Ну, что зависит всё от всего, это трудно спорить), но все же сказать, что прям от устройства не зависит - это тоже опытом не подтверждается. Очень даже зависит, и от конфигурации проц/дма/контроллер шины/периферии и т.д. в этих мелких камнях оч по-разному бывает. [Это как скорость инет-соединения - "до XX Мб/с", где ключевое слово "до").] В остальном конечно согласен.
 
Сверху Снизу