USB 控制

各位先进好目前 我司 要开发一个 产品

是 HOST <=====>DEVICE 这两个 中间 插入 USB 数值

    HOST <==>MPU <===> DEVICE

这时 要让 HOST 不要 发现 DEVICE 变成 MPU 继续通讯.. (MPU 取代 HOST)


且 DEVICE 也不要发现现 HOST 已经断开 由 MPU 取代 HOST


这样能做到吗? 要用 什么MPU 及 周边?


麻烦有先进能 指教!

谢谢


您好,根据您的描述,可以使用我们双USB型MCU实现,同时支持1路Host,1路Device。如果是全速的话可以使用CH32F103系列,高速的话可以使用CH567。

相关产品链接如下:

http://www.wch.cn/search?t=all&q=CH32F103

http://www.wch.cn/search?t=all&q=567




感谢你的回答

因为我之前 不知道 有这个技术论坛!

所以 我自己选的型号是 CH549 也跟 贵司申请到 样品

幕前正在研究中

正因为 研究了 才发现 贵司 有其它型号 的产品 可供 选择!

因为 最近实在太忙了! 且 看贵司的型号 有些也不是太明白

所以想直接问 也许快些!

目前 我想先从 CH549 着手 先作单边 USB 通讯.完成后 再改成双边 通讯,这样是否可行?

另外你提供 的建议 CH567 是 32bit RISC MPU 这个我比较不熟悉

.需要 较多的时间研究!

是否 有 8051 内核 的MPU 我比较熟悉 的推荐!

或是 我用 贵司 独立的USB 晶片 再配上 MPU 一样可以做到

我目前选的型号是 CH376S 来使用.

-------------------------------------------------

另外 再问一个问题

如果 我使用 2个 USB 晶片 可否 由

 HOST==> MPU收到 直接传给 >DEVICE

然后 DEVICE==>>收到 MPU 直接传给 HOST

还是 需要 用 USB SWITCH 切换 会比较好

谢谢你



你好,听你的描述推荐使用CH32F103,Cortex M3内核芯片,有两个U口,可一颗芯片实现HOST <==>MCU<===> DEVICE。

下面链接为芯片手册:

http://www.wch.cn/downloads/CH32F103DS0_PDF.html



感谢你的推荐CH32F103,Cortex M3内核芯片 但是我对 CH32F103 不熟悉


现在因为 急着完成 所以就先选用 CH549 先作单边!

如果单边能完成 我再研究看看 是否 能用 CH549 + CH376 来完成!

或是 用 你推荐 CH32F103,Cortex M3

===============================

目前 我是用 贵司 CH549 的实验板试 做!

并 参考贵司 提供的程式


CompatibilityHID.C

目前 完成度 已经99%

现在遇到两个小问题

ch549USB.jpg


上图是 我用贵司 USB2.0分析仪抓取数据资料

前面的数据都没问题

最后 OUT 76 77 78 3C ......收到 HOST 的资料 CH549 应该要 回答 一样的资料

可是 我目前 看到 回传的是 A1 A1 ....30Bytes


后面 没收到资料 应该是 回 ACK 就可以

但是 CH549 仍然会 回

A1 A1 .......30Bytes

我已经有把 端点2 关闭了 还是一样...

可否请教一下在程式 哪的部分 出的问题?

PS:程式就是用 贵司的

CompatibilityHID.C 修改 的 主程式 都没变 只改 数据!

感謝你


你好,我们CH549目前支持5个端点,包括端点0-端点4。你端点5下发的数据芯片应该是收不到的。


了解!

所以 我看到 A1 A1 .....这一串 资料 是 端点3发的!

那我关闭 端点2 就没用了,是吧!

感谢你 我再找找 从哪里发出的!

=================================

我查了程式根本没有启动端点3

怎么会从端点3传出资料?

另外请问一下收到主机的资料是从哪个临时存器读进来的?

还是只要设UEP0_DMA_H,UEP0_DMA_L就可以吗?

不好意思我是用汇编写的不是用C写的。

CH549usbBf.jpg


主机的数据是你这边控制的嘛?你先初始化端点1-4中的任意一个你没有用到的端点的接收和发送,让主机通过这个端点下发数据。然后在相应端点接收到数据后再去发送你想要发送的数据。


你好!

主机不是我控制的! 主机是 LINUX 的系统程式!

这边我又有几个疑问?

1-主机 为什么会用 端点5 OUT 资料给 CH549 ?

是不是 在枚举阶段 我误给了主机 我的装置错误的讯息?

所以 主机才会认为 我有端点5

2- CH549 我查了贵司 CompatibilityHID.C 端点3 根本 没有启动

为什么 贵司 USB2.0分析仪抓取数据资料 会有端点 3 IN 的资料?

这有 2种可能 A-CH549 端点3 有启动 我没找到 启动典在哪?

B-贵司 USB2.0分析仪抓取数据资料的端点 显示错误 .

可否 解惑一下!

---------------------------------------------

另外 前面曾经问过 如何读取端点x 资料 我看完datasheet 大概知道


是不是 在 UEPx_DMA 位置 设好.然后等 中断. 通知收到资料,

然后直接取读取UEPx_DMA 位置的资料既可.

  

-------------------------------

谢谢你



可以看一下配置描述符中的端点描述符,里面是有对端点进行配置的。可以电脑端先装一个bushound,自己先通过电脑模拟主机下发数据,看一下是哪个流程出了问题。


好的谢谢 你 ,我研究看看!


经过研究 我发现

应该是 贵司的 USB2.0分析仪抓取数据资料的端点 显示错误 .


CH549 不是没有 端点 5吗?

可是 我用贵司的 USB2.0分析仪抓取数据资料的端点 就是 端点 5

怎么会这样?


usb3.jpg


我研究了

我在 USB_INT_ST 这个寄存器 后面增加了判断

如果 USB_INT_ST 的端点 3 以上 我就


CLR IE_USB

这样 就不会有后面的继续乱发了!


只是 我 IE_USB =0 不是应该不会 中断了吗?

为什么 后面 还会有 NAK 的回答 ?


是不是 哪里 有设 自动回答 NAK 的指令?


谢谢 你

usb4.jpg


您好,出现NAK是因为主机在不停的请求端点数据,NAK是正常流程中的拒绝回复数据。USB数据传输的一个特点就是收发都是主机发起的,所以主机需要不停的IN数据,才能在设备需要上传的时候及时上传。这个IN的操作不同的类型设备在逻辑上可能会有所不同。


谢谢回答!

了解了!

请问贵司 是否有 用 端点3 回答的范例 汇编 程式?


我现在尝试修改 不知道 怎魔改的 稍微改错 主机就会当机 然后从开机

这样 我程式 要 修改完成 需要 很多时间

如果 有 范例来套套看 就会快多了!



你好 感謝你們的幫助 我設計的 CH549L 已經大致上可以正確動做了!

目前 我想在下一代的產品 先作開發研究

我看上面的推薦是用  CH32F103 ,但是我在下載資料的時候 貴司的 CH32V103 MPU 跟 CH32F103 好像是一樣的

只是一個是用 ARM 核心 一個是用 RISC -V 核心 請問兩者 對貴司 有差別嗎?

我要用 貴司 會推薦用 哪個?


只有登录才能回复,可以选择微信账号登录