1

我正在裸机环境(32 位)中开发新的 Raspberry Pi 3 B+ 板。我有一个适用于较旧的 Pi 1 板的 USB 驱动程序。据我了解,Pi 1 和 Pi 3 B+ 具有相同的 USB 主机控制器(Synopsis DesignWare 2.0 USB 主机控制器;或简称 dwc),但适用于 Pi 1 的 USB 驱动程序不适用于我Pi 3 B+(或 Pi 3 B)。

经过一些调试消息后,我发现问题是当DWC枚举设备时,它会尝试读取设备描述符,我猜是板载USB集线器/以太网设备(LAN7515) ,但它会返回传输错误,因此无法枚举设备。

我的问题是为什么会发生这种情况?如果 Pi 1 和 Pi 3 具有相同的主机控制器,那么理论上它至少应该能够正确枚举设备。

如果有人能指出我为什么会发生这种情况的正确方向,将不胜感激。

先感谢您。

4

1 回答 1

1

Pi3 存在对齐问题,因为某些 USB 结构本身未对齐并且已打包。它通常需要在一些未对齐的结构上插入一些打包和对齐属性“属性((打包,对齐(1)))”。

规则是 uint16_t* 指针必须是读/写对齐 2 个地址 uint32_t* 指针必须是读/写对齐 4 个地址

所以像这样的结构是错位的。

struct BadStruct __attribute__((__packed__)){
     uint8_t a;
     uint16_t b;
};
于 2018-06-12T19:04:07.320 回答