This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM3352:USB 寄存器访问

Guru**** 2576195 points
Other Parts Discussed in Thread: AM3352

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/623701/am3352-usb-register-access

器件型号:AM3352
主题中讨论的其他器件: TX12

工具/软件:Linux

您好!

我正在使用 sdk3.0.0.4开发 am3352。

我使用默认设备树 am33xx.dtsi、其中 USB 的地址定义如下。 在用户空间中、 我如何访问 usb0/USB1寄存器和读取/写入 usb0/USB1端点?  

请提供一些示例代码。  非常感谢。

别名{
i2c0 =&i2c0;
i2c1 =&i2c1;
i2c2 =&i2c2;
Serial0 = uart0;
SERIAL1 = uart1;
SERIAL2 = uart2;
serial3 = uart3;
serial4 = uart4;
serial5 = uart5;
D_CAN0 = Dcan0;
D_CAN1 =&Dcan1;
USB0 = usb0;
USB1 =&USB1;
phy0 = usb0_phy;
phy1 =&USB1_phy;
Ethernet0 =&cpsw_emac0;
Ethernet1 =&cpsw_emac1;
};

USB:USB@47400000{
兼容="ti、am33xx-usb";
REG =<0x47400000 0x1000>;
范围;
#address-cells =<1>;
大小单元格=<1>;
ti、hwmonds ="USB_OTG_hs";
STATUS ="禁用";

USB_CTRL_mod:control@44e10620{
兼容="ti、am335x-usb-ctrl-module";
REG =<0x44e10620 0x10
0x44e10648 0x4>;
reg-names ="phy_ctrl"、"wakeup";
STATUS ="禁用";
};

USB0_phy:USB-phy@47401300{
兼容="ti、AM335x-USB-phy";
REG =<0x47401300 0x100>;
reg-names ="phy";
STATUS ="禁用";
TI、Ctrl_mod =<&USB_Ctrl_mod>;
};

USB0:USB@47401000{
兼容="ti、musb-am33xx";
STATUS ="禁用";
寄存器=<0x47401400 0x400
0x47401000 0x200>;
reg-names ="mC"、"control";

中断=<18>;
中断名称="MC";
DR_MODE ="OTG";
Mentor、多点=<1>;
Mentor、num-eps =<16>;
Mentor、ram-bits =<12>;
Mentor、power =<500>;
PHY =<usb0_phy>;

DMA =<&cppi41dma 0 &cppi41dma 1 0
cppi41dma 2 0 &cppi41dma 3 0
cppi41dma 4 0 &cppi41dma 5 0
cppi41dma 6 0&cppi41dma 7 0
cppi41dma 8 0&cppi41dma 9 0
cppi41dma 10 0 &cppi41dma 11 0
cppi41dma 12 0 &cppi41dma 13 0
cppi41dma 14 0 &cppi41dma 0 1
cppi41dma 1 &cppi41dma 2 1
cppi41dma 3 1 &cppi41dma 4 1
cppi41dma 5 1 &cppi41dma 6 1.
cppi41dma 7 1 &cppi41dma 8 1
cppi41dma 9 1 &cppi41dma 10 1.
cppi41dma 11 1 &cppi41dma 12 1.
cppi41dma 13 1 &cppi41dma 14 1>;
dma-names =
"rx1"、"rx2"、"rx3"、"RX4"、"rx5"、 "rx6"、"rx7"、
"RX8"、"rx9"、"RX10"、"rx11"、"rx12"、"rx12"、 "rx13"、
"rx14"、"rx15"、
"TX1"、"TX2"、"TX3"、"TX4"、"TX5"、 "TX6"、"Tx7"、
"Tx8"、"Tx9"、"TX10"、"tx11"、"tx12"、 "tx13"、
"tx14"、"Tx15";
};

USB1_phy:USB-phy@47401b00{
兼容="ti、AM335x-USB-phy";
REG =<0x47401b00 0x100>;
reg-names ="phy";
STATUS ="禁用";
TI、Ctrl_mod =<&USB_Ctrl_mod>;
};

USB1:USB@47401800{
兼容="ti、musb-am33xx";
STATUS ="禁用";
REG =<0x47401c00 0x400
0x47401800 0x200>;
reg-names ="mC"、"control";
中断=<19>;
中断名称="MC";
DR_MODE ="OTG";
Mentor、多点=<1>;
Mentor、num-eps =<16>;
Mentor、ram-bits =<12>;
Mentor、power =<500>;
PHY =<&USB1_phy>;

DMA =<&cppi41dma 15 0 &cppi41dma 16 0
cppi41dma 17 0 &cppi41dma 18 0
cppi41dma 19 0 &cppi41dma 20 0
cppi41dma 21 0 &cppi41dma 22 0
cppi41dma 23 0 &cppi41dma 24 0
cppi41dma 25 0 &cppi41dma 26 0
cppi41dma 27 0 &cppi41dma 28 0
cppi41dma 29 0 &cppi41dma 15 1.
cppi41dma 16 1 &cppi41dma 17 1.
cppi41dma 18 1 &cppi41dma 19 1.
cppi41dma 20 1 &cppi41dma 21 1.
cppi41dma 22 1 &cppi41dma 23 1.
cppi41dma 24 1 &cppi41dma 25 1
cppi41dma 26 1 &cppi41dma 27 1.
cppi41dma 28 1 &cppi41dma 29 1>;
dma-names =
"rx1"、"rx2"、"rx3"、"RX4"、"rx5"、 "rx6"、"rx7"、
"RX8"、"rx9"、"RX10"、"rx11"、"rx12"、"rx12"、 "rx13"、
"rx14"、"rx15"、
"TX1"、"TX2"、"TX3"、"TX4"、"TX5"、 "TX6"、"Tx7"、
"Tx8"、"Tx9"、"TX10"、"tx11"、"tx12"、 "tx13"、
"tx14"、"Tx15";
};

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我们将对此进行研究。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    由于我的问题没有任何建议、我想问以下是不是访问 USB 寄存器的正确方法。

    器件树定义了 usb0地址= 0x47401000、因此我在文件中定义了 A 变量。
    volatile uint32_t * USB0_addr =(uint32_t*) 0x47401000、

    当我需要写入或读取 usb0寄存器时、例如 USB0RXMODE (1074h)、我将执行以下操作
    读取:ST=USB0_addr[0x74]
    写入:USB0_addr[0x74]=st

    上述内容是否正确?

    但我仍然不确定如何写入或读取 USB 端点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    端点不是寄存器。

    请使用 libusb 等库。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在编写自己的驱动程序模块时不使用 libusb。 我使用 USB0作为外设、并将其仿真为多个器件、例如键盘、鼠标和大容量存储。 我的器件应用程序可以打开 USB 驱动程序模块、并通过驱动程序模块中定义的 I/O 控制功能写入特定的端点。
    为此,我至少需要知道可以在其中写入/读取数据的端点的数据端口地址。 TRM 未提供有关如何使用 USB 的足够详细信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 Linux 中实施驱动程序以直接访问 USB 控制器端点并不是一种有效的设计。
    如果您尝试编写内核驱动程序、则应像其他 USB 类驱动程序一样使用 USB 内核 API;
    或者、如果您尝试编写用户空间驱动程序、强烈建议使用 libusb。

    我要关闭此主题。