Арпрос
Сб 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
...
Эти адреса относятся к ОЗУ с дефицитом 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
Луча
Все, что я знаю об 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, в котором говорится, какой минимальный размер для конечной точки команды.
Мы, вероятно, должны проверить где -нибудь, чтобы посмотреть, какой из них лучше сделать, или, возможно, конечная точка управления никогда не отправляет пакеты больше 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 в код.
Вот конфигурация конечной точки в дескрипторе USB в код.
_currentSetting->bitOrder = bitOrder;