Raspberry Pi 3 USB Голый Металл - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над новой платой Raspberry Pi 3 B + в чистом металлическом окружении (32-битная версия).У меня есть работающий драйвер USB для старых плат Pi 1.Из того, что я понимаю, Pi 1 и Pi 3 B + имеют один и тот же хост-контроллер USB (хост-контроллер Synopsis DesignWare 2.0; или сокращенно dwc), но драйвер USB, который работает на Pi 1, не работает для меня наPi 3 B + (или Pi 3 B либо).

После просмотра некоторых сообщений отладки я обнаружил, что проблема заключается в том, что, когда DWC перечисляет устройства, он пытается прочитать дескриптор устройства,я предполагаю, что это встроенное USB-концентратор / Ethernet-устройство (LAN7515), но оно возвратит ошибку передачи и, следовательно, не сможет перечислить устройство.

Мой вопрос: почему это происходит??Если Pi 1 и Pi 3 имеют один и тот же хост-контроллер, то теоретически он должен по крайней мере правильно перечислить устройство.

Если кто-то может указать мне правильное направление относительно того, почему это происходит, был бы очень признателен.

Заранее спасибо.

1 Ответ

0 голосов
/ 12 июня 2018

У Pi3 есть проблема с выравниванием, потому что некоторые из USB-структур не выровнены изначально и они упакованы.Обычно требуется вставить некоторые атрибуты упаковки и выравнивания " атрибут (( упакованный , выровненный (1)))" на некоторые структуры, которые не выровнены.

правило идет uint16_t * указатели должны быть для чтения / записи, выровнять 2 адреса uint32_t * указатели должны быть для чтения / записи, выровнять 4 адреса

Таким образом, структура, подобная этой, выровнена.

struct BadStruct __attribute__((__packed__)){
     uint8_t a;
     uint16_t b;
};
...