Raspberry Pi 3 USB裸金属

时间:2018-06-07 05:51:25

标签: raspberry-pi usb raspberry-pi3 bare-metal usb-hostcontroller

我正在裸机环境(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具有相同的主机控制器,那么理论上它应该至少能够正确地枚举设备。

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

提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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