回  复
1234567891011 48

查看: 69514 | 回复: 236

有关CH372或CH375的USB通讯的问题解答
wt 发表于:2005-01-19 17:03:00 1# 编辑

7

主题

10

帖子

868

积分
等级

高中一年级

私信
* 需要设计参考资料(光盘资料可以参考FILELIST.TXT文档,网上资料更新)
1、如果是在没有单片机的情况下,进行简单的I/O输入输出,那么可以参考CH341的资料,CH341不需要
单片机就能独立工作,可以提供串口、并口、兼容IIC或I2C的2线接口、兼容SPI及JTAG的4线接口、
5线接口等,可以提供多个GPIO通用I/O,可以用于控制低速模数转换AD、DA、数字I/O、I/O扩展等。
2、如果是单片机/DSP等与计算机相连接,也就是USB设备方式的应用,那么参考CH372的资料。可以下
载CH372+CH451评估板/演示板的资料CH372EVT.ZIP,有PDF文档和例子程序,例如,评估板说明及USB
设备应用参考CH375451,参考电路和PCB,小数据量交互传输/应用层中断演示的例子DEMO,含MCS51
单片机C程序和汇编程序,批量数据传输的例子BULK测试速度,USB外置固件的C和汇编例子XFIRM,
VC/VB/BC/DELPHI的例子等。另外,可以下载CH37X在计算机WINDOWS下的简单调试工具CH372DBG.ZIP,
其中有MCS51单片机上位机与下位机的C源程序,PC机程序可以通过USB对MCS51进行简单仿真和控制,
其中的C程序稍作修改就可以用于其它单片机。调试工具DEBUG372可以用于调试和检查下位机的程序。
3、如果是单片机/DSP等控制其它USB设备,也就是USB主机方式的应用,那么可以参考CH375的资料。
如果是读写U盘并且用量较少或者是系统集成,关心快速入门并且简单易用,那么可以参考半成品U盘
文件读写模块的说明CH375HM.ZIP;如果是做原始产品设计,关心成本,那么可以参考CH375评估板资
料CH375EVT.ZIP,其中有单片机读写U盘的例子和U盘文件级子程序库的API说明;如果是单片机控制
USB打印机等,或者CH375与CH372等其它USB产品通讯,可以参考USB主机方式应用参考CH375HST.ZIP。
在设计USB-HOST电路和PCB之前,强烈建议参考CH375的设计注意事项README.PDF。
* 关于电源
优先使用5V电源,CH37X在5V电源时的性能高于3.3V,可以作为工业级使用。
对于USB-HOST应用,建议参考CH375的设计注意事项README.PDF,要考虑USB带电插拔的实际情况。
我们的样板中的电阻R1(串在USB电源与本板电源之间)是为了便于双电源供电,防止两个电源电压不同
冲突。如果仪器本身有电源,或者不需要计算机双电源供电,那么可以去掉该电阻。
* 单片机无法与CH372或者CH375进行通讯,例如CMD_CHECK_EXIST不成功或者CMD_SET_USB_MODE返回错误
通常是硬件问题,例如:
1、CH375没有时钟,可能是晶体不良未振荡,电容或者晶体漏电,CH375的时钟必须是12MHz。
2、CH375没有成功复位,可能是RSTI引脚没有0.47uF上拉电容,也可以用单片机I/O口或者uP监控电路为
其提供复位,注意CH375的RSTI引脚内部有下拉电阻。对于CH372应该确保电源完全放电后再通电。
3、CH375的片选地址译码错误,例如,与RAM地址范围冲突
4、数据总线或者读写线连接错误等
5、用CMD_CHECK_EXIST命令测试硬件问题,该命令必然返回数据,如果返回数据不是0FFH,那么通常是
数据总线连接错误,这种问题容易处理,可以根据返回的值分析是哪个数据线有误。
如果返回数据是0FFH,那么可能CH375不正常,例如,无时钟、未复位、读写片选线有误、工作于串
口方式等,如果复位期间CH375的TXD引脚是高电平,那么CH375工作于串口方式,当然并口操作无效
* 测量CH375的晶体振荡时好象不振荡
为了降低EMI,CH375的振荡为接近正弦波,所以振荡相对较弱,而一般单片机的振荡接近方波,振荡较
强但是电磁辐射大很多。当测量仪器接入CH375的引脚时,由于引入电容,在3.3V电源电压时容易导致
CH375停振,当去掉测量仪器时通常会恢复。如果是在3.3V电源电压下,建议使用有源晶振或者外部振
荡,或者将XI引脚的电容换为10pF。振荡后XO引脚的电压在一半电源电压附近。
* 连接到计算机没有反应
当单片机控制CH37X执行CMD_SET_USB_MODE命令,选择模式2后,首次连接计算机,计算机就应该提示找
到新硬件,否则应该检查CH37X是否正常工作(看前面的问题)。如果确认单片机端没问题,那么可以
用万用表测量CH37X的UD+和UD-引脚,也就是USB信号线,应该UD+为3V以上,UD-为0.4V以下,否则说明
CH375未工作或者未收到CMD_SET_USB_MODE命令,只有模式1和2会导致UD+上拉到3V电压以上。
* 连接到计算机,无法安装驱动,提示未知设备
1、CH375的GND以及单片机的GND必须与USB的GND可靠地连接,USB的VBUS/+5V可以不连接。
2、USB的D+和D-信号线接反,导致通讯失败,USB线4个,分别是+5V,D-,D+,GND,顺序不能错。
3、USB信号线必须用标准的USB线,不能用普通排线等代替,D+和D-布线要平行,附近铺地减少干扰。
4、由于CH37X内置了USB电阻,所以外部电路中D+和D-不需要串电阻,如果一定要串也不能大于5欧姆。
5、如果是5V工作电压,CH37X的V3引脚必须与VCC断开,如果是3.3V工作电压,那么V3应该连接VCC。
6、建议调试初期不要设置USB-ID,也就是单片机不要执行CMD_SET_USB_ID命令,等调通后再尝试修改。
如果单片机执行CMD_SET_USB_ID命令,那么必须在CMD_SET_USB_MODE之前执行。如果单片机执行
CMD_SET_USB_ID命令修改了USB-ID,那么必须同步修改驱动程序INF中的ID才能安装驱动。
* 计算机成功安装驱动程序,但是无法进行任何USB通讯
通常是单片机未收到或者未处理USB中断,驱动的安装与初始化是由CH372和CH375内置USB固件实现的,
不需要单片机的任何干预,而USB数据通讯需要由单片机收到USB中断并由程序实现
* 在与计算机连接时,为什么不能对单片机进行程序单步调试
标准的USB传输都是时间限制,单步调试容易导致USB超时,尤其在外置固件模式下,更容易超时。
解决方法是,用CH375作为USB-HOST,代替计算机单步调试您的USB设备,CH375可以不超时。
* 如何用一个CH375实现USB-HOST和USB-DEVICE
CH375的串口连接只支持USB-HOST,所以必须通过8位并口与单片机连接。由于CH375自身没有主导权,
只能在单片机的控制下,切换为主机或者设备模式,所以单片机应该决定是主机还是设备,具体可以参
考USB电路及PCB设计注意事项README中的说明,在CH375评估板资料中,EXAM0是主从切换应用的例子。
* 关于应用层USB中断服务的特点
CH372的动态锭接库DLL提供了伪中断服务,实际的中断服务仍然是在驱动程序库完成的,只是在完成后
向DLL发了个通知,由DLL再调用伪中断服务子程序。由于涉及到系统层与应用层切换以及线程切换,
所以中断频率不能太高,如果太高,虽然驱动程序能够收到中断,但是等到通知到应用层,再调用客户
的伪中断服务程序,最慢可能需要10毫秒,从而在应用层丢失中断。自己写驱动可以提高响应速度。
* 关于USB传输速度
CH372/CH375与计算机通讯时,默认的CH37X驱动程序和DLL提供的API是同步I/O而非异步I/O,所以API
返回就说明该API执行完成,由于WINDOWS要提前安排USB帧调度,所以两次USB传输之间的间隔总是会大
于1mS,例如传两个64字节的包可能需要2mS,而传一个256字节的包可能只需要1mS。这种情况可以通过
修改驱动程序在驱动程序层传输数据或者用异步I/O解决,注意异步I/O在API返回时不代表该API完成。
计算机单次收发的数据块越大平均速度越快(单次最大4KB),CH372/CH375实测传输速度最高为400K字
节每秒(在10秒内连续测试的平均值),但是实际应用考虑到留些余量,考虑到应用程序在收发数据之
外还要分析处理数据,通常应该按200K计算。USB作为串行总线,采用包传输的方法,实时性不如PCI总
线,PCI能达到微秒级,而USB的响应时间只有几百微秒到几毫秒,在驱动程序中实现的性能要好些。
* 如何做WINDOWS驱动程序,WINDOWS DDK如何获得
我们的驱动程序全部使用WINDOWS 98/2000/XP DDK编译,同时支持WINDOWS 98/ME/2000/XP。DDK可以从
微软官方网站免费下载(订购芯片时如果需要我们也可以提供刻录光盘),除此之外,只需VC 5.0或者
VC 6.0编译器,完全不需要额外软件支持。这样做出的驱动程序代码效率高并且文件短小,通常我们用
INF安装信息文件而不是SETUP可执行程序,可以算是绿色软件。用户如果希望有更友好或者更简单的编
译方法,那么可以使用第三方的驱动程序生成工具,当然,那些软件通常都不便宜。
对于非WINDOWS驱动程序,可以参考其它USB设备的驱动源码修改,大多数USB设备的枚举、初始化过程都
是一样的,区别仅在于端点/管道:CH372/CH375除端点0外有三个端点,地址分别是02H、82H、81H,依
次为主输出BULK-OUT/64字节,主输入BULK-IN/64字节,辅输入INTERRUPT-IN/8字节/1mS,通常只用前两
个主端点,一个从计算机输出到CH375,一个从CH375输入到计算机。
* 数据采集中,单片机如何设计USB程序
简单的做法是,单片机开两个64字节的缓冲区,主程序定时采集数据,累加到第一个64字节缓冲区中,
当第一个缓冲区满时,使用CMD_WR_USB_DATA7命令上传64字节,然后主程序切换到第二个缓冲区继续采
集数据,当第二个缓冲区满时,首先检查上次的上传是否成功(上传成功会收到CH37X的中断),如果成
功则继续上传64字节,如果不成功,说明计算机应用程序没有来取走数据(正忙或者未执行采集程序),
那么可以忽略或者另行处理(提示计算机未连接)。该方法不使用中断,但是需要计算机不断地来读取
数据,实际的计算机程序可以设置USB读取超时,防止在单片机不上传数据时计算机一直等待。
[color=Red]* 设计的计算机端应用程序在读写USB时有时会死<
文章被wt2005-07-05 13:09:00时间编辑
musich 发表于:2005-03-05 11:33:00 2#

0

主题

9

帖子

36

积分
等级

小学一年级

私信
我用CH375当372来用.
可是刚插上USB线时,设备是正常的.
但过了一段时间就不正常了.我的系统是XP.
不正常时,计算机根本发现不了375,有时竟是其它设备,或未知设备,
请问,这是什么原因呢?
想作控制和采集用,有点怕.
谢谢.
musich@126.com
tech 发表于:2005-03-05 18:41:00 3#

4

主题

272

帖子

1205

积分
等级

高中三年级

私信
检查CH37X的时钟XI/XO和复位RSTI,必须是稳定的。如果硬件检查无误,可以贴出你的程序来检查。
实在不行,上位机和下位机可以先试用我们的DEMO或者BULK测试程序,连续24小时测试看是否有问题。
如果有问题,那么硬件问题,否则是软件问题。
musich 发表于:2005-03-07 10:34:00 4#

0

主题

9

帖子

36

积分
等级

小学一年级

私信
谢谢, 硬件方面应该没问题.
软件方面现在还不确定.
但在不同的PC上,表现好像是不同的,
有时还要求重装USB驱动.
我再试试.
zhaor 发表于:2005-03-14 15:36:00 5#

5

主题

33

帖子

164

积分
等级

小学四年级

私信
新来的,报个到。
jl 发表于:2005-03-15 14:19:00 6#

0

主题

1

帖子

5

积分
等级

小小白

私信
把USB口与计算机连接后,计算机有时提示找到新硬件,有时就没有那个发现硬件的标志,没标志时,用万用表测UD+和UD-十无电压,出现标志时,装不上驱动程序,

楼层回复

关闭

评分

关闭
积分 评分区间 今日剩余
评分扣除自身相应积分,普通会员最高加分3分 0~10 5
你需要登录才可以发帖