我正在裸机环境(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具有相同的主机控制器,那么理论上它应该至少能够正确地枚举设备。
如果有人能指出我为什么会发生这种情况的正确方向,那将非常感激。
提前谢谢。
答案 0 :(得分:1)
Pi3存在对齐问题,因为某些USB结构不是本机对齐的并且它们是打包的。它通常需要插入一些包和对齐属性" 属性((打包,对齐(1)))"在一些未对齐的结构上。
规则如此 uint16_t *指针必须读/写对齐2个地址 uint32_t *指针必须读/写对齐4个地址
所以像这样的结构是错位的。
struct BadStruct __attribute__((__packed__)){
uint8_t a;
uint16_t b;
};