hpxzw_foxmai 发表于 2021-9-27 20:07:29

usb host和device直接通信的疑问?

本帖最后由 hpxzw_foxmai 于 2021-9-27 20:09 编辑

usb host和device 可以直接通信吗?
需求:
一台机器A,芯片没有USB HOST功能,只有USB DEVICE功能(可以在电脑上模拟U盘)
目标:

希望机器A通过U盘来升级,不希望机器A来模拟U盘,不方便

老板不想加外扩usb芯片,觉得这样每台机器都要,成本不划算~


想法:
自己做一个转接板,转接板带有STM32 USB HOST功能的芯片,例如STM32F429,

机器A有个专用按键,开机按下就进入USB DEVICE模式
机器A接转接板,这时机器A算是U盘A
转接板接U盘,这里就是真实U盘B,
转接板按下一个按键,STM32F429就重启进入升级模式,读取U盘B(真实U盘)的内容,然后发送给U盘A(机器A)
-----------------------------------------------------------------------------------------------------------------------------------------
①这样的功能,可以实现吗?可以的话,F429与U盘A(机器A)是怎么通讯?
②F429可以支持2个U盘吗?
③有没有这样的案例可以参考?

谢谢!


eric2013 发表于 2021-9-28 11:34:24

读了好几遍,确实没有读懂楼主的意思,不好意思。方便的话,重新描述下。

机器A有个专用按键,开机按下就进入USB DEVICE模式
机器A接转接板,这时机器A算是U盘A
转接板接U盘,这里就是真实U盘B,
转接板按下一个按键,STM32F429就重启进入升级模式,读取U盘B(真实U盘)的内容,然后发送给U盘A(机器A)

这四段话没读懂

hpxzw_foxmai 发表于 2021-9-28 13:31:35

eric2013 发表于 2021-9-28 11:34
读了好几遍,确实没有读懂楼主的意思,不好意思。方便的话,重新描述下。

机器A有个专用按键,开机按下 ...

额,不好意思,可能说的比较复杂
就是机器A只有USB DEVICE模式,
那我能不能做个小机器,小机器与机器A通讯,把机器A当U盘来读写,
然后小机器从真实U盘来读数据,写到机器A里面去

这样能不能实现?
另外小机器与机器A通讯是按什么协议?

hpxzw_foxmai 发表于 2021-9-28 14:31:05

eric2013 发表于 2021-9-28 11:34
读了好几遍,确实没有读懂楼主的意思,不好意思。方便的话,重新描述下。

机器A有个专用按键,开机按下 ...

刚才回复的,不知道怎么一直没显示
就是机器A只有DEVICE模式,
那我能不能做个专门用来升级的工装,简称B
B通过USB与机器A连接,把机器A当成一个U盘,
然后从真实U盘读取信息,写入机器A里面

这样是否可行??
可行的话,写入机器A,是按什么协议? 有没有参考的例程

eric2013 发表于 2021-9-29 09:48:04

hpxzw_foxmai 发表于 2021-9-28 14:31
刚才回复的,不知道怎么一直没显示
就是机器A只有DEVICE模式,
那我能不能做个专门用来升级的工装,简 ...

可以的,没问题。host做外挂U盘功能,device做模拟U盘功能。

hpxzw_foxmai 发表于 2021-9-29 12:24:24

eric2013 发表于 2021-9-29 09:48
可以的,没问题。host做外挂U盘功能,device做模拟U盘功能。

好的 谢谢版主

hpxzw_foxmai 发表于 2021-9-29 16:12:32

eric2013 发表于 2021-9-29 09:48
可以的,没问题。host做外挂U盘功能,device做模拟U盘功能。

版主好,还有个问题
我们机器A需要上电就模拟U盘,然后等工装自动检测,发现机器A是U盘后,写文件表示知道了
这样机器A就等着进行升级
否则就正常启动

之前的stm32芯片,我测试发现如果使用了usb的功能,需要重新复位才能跳转到APP
问题:
初始化了host或者device后,能直接调整到APP吗? 我这边之前都不能这样操作
跳转的代码是参考你的IAP



eric2013 发表于 2021-9-29 17:04:42

hpxzw_foxmai 发表于 2021-9-29 16:12
版主好,还有个问题
我们机器A需要上电就模拟U盘,然后等工装自动检测,发现机器A是U盘后,写文件表示知 ...

可以跳转,跳转前要关闭所有USB时钟,并且调用DeInit函数复位初始化。

hpxzw_foxmai 发表于 2021-9-30 16:08:11

eric2013 发表于 2021-9-29 17:04
可以跳转,跳转前要关闭所有USB时钟,并且调用DeInit函数复位初始化。

谢谢版主 我这边试试

hpxzw_foxmai 发表于 2021-10-9 18:17:51

eric2013 发表于 2021-9-29 09:48
可以的,没问题。host做外挂U盘功能,device做模拟U盘功能。

版主好,我这边发现这个方案不行

stm32模拟成U盘,是FAT格式,主机那边读U盘,用的是fatfs,只支持fat32或者exFAT格式
这个怎么弄?

解决方案:
1、stm32模拟U盘,变为exFAT或者fat32格式
2、IAP程序,可以读取FAT格式的文件
哪个方案可行?用什么库?

eric2013 发表于 2021-10-10 09:41:49

hpxzw_foxmai 发表于 2021-10-9 18:17
版主好,我这边发现这个方案不行

stm32模拟成U盘,是FAT格式,主机那边读U盘,用的是fatfs,只支持fat ...

你说的fat是fat几,fatfs支持fat12,fat16,fat32,exfat,完全没问题,这就是所有的fat系列了。



hpxzw_foxmai 发表于 2021-10-10 12:07:56

eric2013 发表于 2021-10-10 09:41
你说的fat是fat几,fatfs支持fat12,fat16,fat32,exfat,完全没问题,这就是所有的fat系列了。

应该是FAT16吧,stm32模拟U盘,在windows上就显示FAT格式,后面没写数字

我刚试了下,我IAP支持的是FAT32,但U盘格式化成exFAT和NTFS,都会进中断,能识别到U盘连接

但另外一台设备,模拟成U盘,FAT格式,插上电脑就变U盘,(简称机器A)

通过typec-typec的线连接到IAP机器(检测主机B),
主机B 不能识别成U盘,进不了中断

这样看,上面说的方案行不通,不知道是哪里的问题
页: [1]
查看完整版本: usb host和device直接通信的疑问?