Configure the type-c port to OTG with OTG_ID

dmesg請完整咐上來

这个是我刚修改的一版:
myJetsonOrinNx_20240718_4.dts.txt (308.1 KB)
dmesg_20240718_4.txt (56.0 KB)

usb3-1如果真的沒有接給usb2-0麻煩就關掉了…

這些明顯的錯誤在文件裡面都有提到, 麻煩先修正

1.关闭这个使能后效果一样
image

2.这两个usb0/1网口设备是不是只能用ip6连?我之前测试用的ip4

請問你有確認過你的/proc/device-tree下面的狀況跟你的設定一樣嗎?

還有, 正確的otg用法是你要讓usb自己透過id/vbus pin進行role的切換 , 不是你自己跑去echo

我重新梳理了下我们的操作,重新来了一遍,otg开机自动实现了device模式,但是仍ping不通主机
myJetsonOrinNx_20240718_19_02.dts.txt (308.2 KB)
myJetsonOrinNx_20240718_19_02_dmesg.txt (58.0 KB)

开机打印:

$ cat /sys/class/usb_role/usb2-0-role-switch/role
device

/proc/device-tree关闭的usb3.0/3.1检查:

$ cat /proc/device-tree/bus@0/padctl@3520000/ports/usb3-0/status
disabled
$ cat /proc/device-tree/bus@0/padctl@3520000/ports/usb3-1/status
disabled
$ cat /proc/device-tree/bus@0/padctl@3520000/ports/usb2-0/usb-role-switch
这里返回是空的

dmesg打印好像有些不一样了,ifconfig看usb0/usb1显示了发送/接受字节,是否证明配置是成功的?
usb0/usb1的网口网段有要求吗,我做如下配置后还是不能ping通主机
image

sudo ifconfig usb0 192.168.55.2 netmask 255.255.255.0 broadcast 192.168.55.255 up
sudo ifconfig usb1 192.168.55.3 netmask 255.255.255.0 broadcast 192.168.55.255 up

有时间可以再帮忙看下吗,谢谢

其實在ping的是l4tbr0那個介面. 不是 usb0/1.

非常感谢,主机可以ping通l4tbr0这个网口了。
但还有个问题,设备通过目前的设备树修改后,Type-C的开机otg状态完全由设备树“id-gpio = <0xf3 0x10 0x01>;”决定了,id-gpio的值直接决定了开机后设备的otg状态,eg:0x00=:HOST,0x01:DEVICE
而不是开机后根据插入的外设自由切换otg状态。
我想实现完整自由切换的otg,还有那些地方可以检查和修改吗?帮忙看看,谢谢

image

备注:完整的设备树和dmeg见上个问答并无改变。

請問你的設計上到底有沒有vbus-det pin?

有的,这个设计有问题吗?


image

完整的otg是由ID跟VBUS-DET兩個GPIO決定的. 文件上的truth table有寫

如果沒辦法完整切換, 建議你看一下是不是vbus-det 部份有問題

gpio设备树配置修改:

vbus-gpio = <0xe5 0x99 0x01>; //GPIO_ACTIVE_LOW
id-gpio = <0xf3 0x10 0x00>; //GPIO_ACTIVE_HIGH

开机执行:

# cat /sys/kernel/debug/gpio
gpio-328 (PCC.00              |id                 ) in  lo IRQ
gpio-479 (PZ.01               |vbus              ) in  hi IRQ ACTIVE LOW

image

我测试了下,发现我的ID脚不论怎么操作“ cat /sys/kernel/debug/gpio”都是显示“lo”低电平。

开机后,设备插入usb线—主机,测量ID脚电压1.79V,但是测试显示ID脚仍是低电平。

# sudo cat /sys/kernel/debug/gpio
 gpio-328 (PCC.00              |id                  ) in  lo IRQ
 gpio-479 (PZ.01               |vbus                ) in  hi IRQ ACTIVE LOW

问题:

  1. cat /sys/kernel/debug/gpio命令中,lo/hi代表当前状态对吧?是实时的吗?IRQ ACTIVE LOW是低电平触发中断对吧?
  2. ID脚的高低电平电压是多少伏?
  3. 我的问题出在哪里?帮看下,谢谢

你的USB_ID pin是怎么连接的?你的type-c的插座上没看到这个pin。

TYPEC_CC那个就是,如下:
image


如果你已经正确的把GPIO3 设成了输入,那它的状态只会受DEVICE_EN影响。你是说无论DEVICE_EN是高还是低,USB20_OTG_ID_DET都是低吗?

是的,不论我在板子上测量是高电平还是低电平,执行“sudo cat /sys/kernel/debug/gpio”命令后,显示ID脚永远是下面这个状态(“lo”是当前低电平意思对吧?),我不确定是命令的返回字符是不是低电平这个意思,我的系统没有配置GPIO-SYSFS,没法查看。

gpio-328 (PCC.00 |id ) in lo IRQ

我的万用表测量的是这点位,即DEVICE_EN的电平

你是怎么设置GPIO3 pin的?有在pinmux sheet里把它设成input吗?

没有,只在usb的otg这里做了配置,设备树其他地方没有对该引脚做其他修改