USB PMA адреса

Арпрос
Сб 27 января 2018 г. 16:21
Я пытаюсь понять, как работает периферийное устройство USB на STM32F1, и я заметил, что кленовое ядро ​​выделяет буферы USB PMA, начиная с смещения 0x40 вместо 0x00. Кто -нибудь знает, почему? Первоначальный 0x40 зарезервирован для чего -то? (МОЖЕТ?)

Mrburnette
Сб 27 января 2018 г., 17:27
Может быть http: // docs.Leaflabs.com/static.Leaflab ... b_config.час
..Arduino\libraries\rfid-master\src/MFRC522.h: In constructor 'MFRC522::MFRC522(SPIClass*, SPISettings)': ...Documents\Arduino\libraries\rfid-master\src/MFRC522.h:422:20: warning: 'MFRC522::_spiSettings' will be initialized after [-Wreorder] const SPISettings _spiSettings; // SPI settings. ^

Стивестронг
Сб 27 января 2018 г. 18:06
[Арпрос - Сб 27 января 2018 г. 16:21] - Я пытаюсь понять, как работает периферийное устройство USB на STM32F1, и я заметил, что кленовое ядро ​​выделяет буферы USB PMA, начиная с смещения 0x40 вместо 0x00. Кто -нибудь знает, почему? Первоначальный 0x40 зарезервирован для чего -то? (МОЖЕТ?)
Любая ссылка (ссылка) на документ (основной файл)?

victor_pv
Сб 27 января 2018 г., 18:21
Справочное руководство может показать некоторые детали, и есть веб -страницы, показывающие, как работает последовательная связь USB, но в основном помимо конечных точек RX и TX, у вас есть конечная точка управления. Сама конечная точка управления нуждается в буфере и помещается в первую очередь.
Эти адреса относятся к ОЗУ с дефицитом USB.
Начало этой оперативной памяти - это таблица конечных точек, поэтому буферная структура такая
00-нн таблица определения конечной точки
nn - xx buffer 1
xx - yy buffer 2
...

Арпрос
Солнце 28 января 2018 12:49
Виктор: Поэтому причина, по которой первый буфер начинается с 0x40, а не 0x00, - это оставить место для таблицы конечных точек. Это имеет смысл. И действительно, таблица конечных точек составляет длину 0x40 байт (восемь конечных точек x 4 x uint16).

Арпрос
Солнце 28 января 2018 12:53
[Mrburnette - Сб 27 января 2018 г., 17:27] - _currentSetting->bitOrder = bitOrder;

Mrburnette
Солнце 28 января 2018 1:26
USB сводит меня с ума (я.)

Все, что я знаю об USB, я узнал от V-USB, играющего много лет назад на AVR. Хорошая вещь о V-USB-это документация довольно проста.

http: // vusb.Викидот.Com/Driver-API

Луча

Стивестронг
Солнце 28 января 2018 г. 8:41
[Арпрос - Солнце 28 января 2018 12:53] - Кстати, разве не странно, что vcom_rx_addr = vcom_notivation_addr + 0x10, вместо vcom_rx_addr = vcom_notivation_addr + 0x40, учитывая, что размер пакетного буфера VCOM_NOTICation равен 0x40? Это ошибка? Или я что -то недоразумю о том, как все это работает.
Это действительно может быть ошибка.
Либо vcom_notification_epsize должен быть 0x10 или vcom_rx_addr должен быть 0x140.

EP3 перекрывается с EP2 до сих пор не беспокоит, потому что ENDP2 (и все еще не использовался) не использовался ни в каком приложении, AFAIK.

Однако ни один из этих определений не может быть найден в ядре.

Поэтому, пожалуйста, предоставьте ссылку на основной файл, в котором вы думаете, что что -то не так.

Арпрос
Солнце 28 января 2018 г. 18:22
[Стивестронг - Солнце 28 января 2018 г. 8:41] -
[Арпрос - Солнце 28 января 2018 12:53] - Кстати, разве не странно, что vcom_rx_addr = vcom_notivation_addr + 0x10, вместо vcom_rx_addr = vcom_notivation_addr + 0x40, учитывая, что размер пакетного буфера VCOM_NOTICation равен 0x40? Это ошибка? Или я что -то недоразумю о том, как все это работает.
Это действительно может быть ошибка.
Либо vcom_notification_epsize должен быть 0x10 или vcom_rx_addr должен быть 0x140.

EP3 перекрывается с EP2 до сих пор не беспокоит, потому что ENDP2 (и все еще не использовался) не использовался ни в каком приложении, AFAIK.

Однако ни один из этих определений не может быть найден в ядре.

Поэтому, пожалуйста, предоставьте ссылку на основной файл, в котором вы думаете, что что -то не так.
Здесь это.

Я бы сделал размер управления 0х10. Это, кажется, работает в моей библиотеке USBHID.
_currentSetting->bitOrder = bitOrder;

victor_pv
Пн 29 января 2018 г. 12:47
Я думаю, что вы правы в том, что размер должен быть 0x10, или следующий буфер должен запустить 0x30.
Мы, вероятно, должны проверить где -нибудь, чтобы посмотреть, какой из них лучше сделать, или, возможно, конечная точка управления никогда не отправляет пакеты больше 0x10, и мы еще не заметили никаких проблем.
Если я помню, прямо в конечные точки RX и TX, потому что это тип массовой передачи В полных пакетах режима режима могут быть размеры до 0x40bytes, нельзя использовать пакеты, более 0x40, поэтому, даже если конечная точка RX была.
Попытка проверить, найду ли я что -нибудь о конечной точке управления.

В F4 CDC CMD конечный размер пакета установлен на 8 байт, поэтому, вероятно, нормально использовать 16 байтов. Все еще пытаясь найти что -то в документах CDC, в котором говорится, какой минимальный размер для конечной точки команды.

Арпрос
Пн 29 января 2018 г., 5:04
Глядя на код в ядре, конечная точка управления настроена для связи с устройством к дому, но нет кода, чтобы на самом деле отправлять что-либо через эту конечную точку. Вот почему мы не столкнулись с никакими проблемами с этой ошибкой. В частности, должно быть безопасно уменьшить размер до 0x10, так как мы вообще не используем его. :-)

victor_pv
Пн 29 января 2018 г. 22:56
[Арпрос - Пн 29 января 2018 г. 5:04] - Глядя на код в ядре, конечная точка управления настроена для связи с устройством к дому, но нет кода, чтобы на самом деле отправлять что-либо через эту конечную точку. Вот почему мы не столкнулись с никакими проблемами с этой ошибкой. В частности, должно быть безопасно уменьшить размер до 0x10, так как мы вообще не используем его. :-)
Не проверил сегодня, но когда я проверил на днях, я подумал, что настраивается только конечная точка TX. Поскольку USB имена TX и RX с точки зрения хоста, конечная точка TX означает данные от хоста на устройство.
Я не проверял, для чего он используется, я подумал, что это будет для таких вещей, как общение, когда DTR активен/неактивен, и т. Д., Но это было предположение, не глядя на код, поэтому, если вы правы, поэтому мы сделали 't, столкнусь с проблемами.

Арпрос
Вторник 30 января 2018 г. 12:57
Это правда, что USB называет вещи с точки зрения хоста, но код Maple CDCACM использует «TX/RX» с точки зрения устройства, но «внедорожник» с точки зрения хоста. Да, это сбивает с толку!

Вот конфигурация конечной точки в дескрипторе USB в код. _currentSetting->bitOrder = bitOrder;

Встроенная сборка