因为我需要随时切换主从,所以我的做法是在主循环中检测当前USB从的电压,来切换到主还是从。每次从切换到主都会:CH375复位0.5s->等待100ms->写复位命令->等50ms->设置工作模式为6。几乎没有出现过优盘插在上面开不了机的,倒是有热插拔不行的,但是极少。
不是开不机,是不能正常读写文件,可以检测到U盘啊,只是读文件或者写文件,一操作就没反映了死在了函数 void xQueryInterrupt( void )里面! 你说的那样操作,我试过了,行不通! TOhcn 你们公司一直都强调说是电源的问题,能否详细一点?到底是电源什么东西会影响到支持率不高?而且只能支持热插拔呢? 在做这个项目前,我只是担心可能不能支持热插拔,因为看很多资料,很多人做的都是热插拔就重启系统了,但是没有想到我做的却只支持热插拔,怪怪的! 在这之前我也在这个论坛发了很多相关的帖子,也打了好多次电话咨询贵公司,但是一直都没有得到处理! 希望有人能帮帮忙!谢谢!
估计他们所谓的电源问题,应该是电源的纯净,比如说CH375上他们提及的去耦电容一定要加,优盘的供电你一直强调供电电流已经很强,实际上我现在是一个7805拉了CPU,CH375,还有其它外围电路,还拉了优盘,目前没有见不够的优盘.这个用示波器看看电源是不是比较纯净.只要电源线的幅度变化基本上能控制在0.1V左右就算OK了.
如果是电源不纯的问题,那么我就不明白了,为什么热插拔就可以正常操作,而先插上U盘再上代内就不能正常操作呢?不明白!去藕电源的话已经加了,完全是按照贵公司的技术文件设计的硬件和PCB啊!而且5V在硬件上已经采用了单独供电处理啊! 另外我觉得支持率根本没有所胃的90%,所以不知道他这个90%是测试了多少U盘来计算的,我测试了10款U盘有三款是不行的!如果就这个数据来看是应该是70%,但是在客户那里却反馈回来很多U盘都不支持,也就是说连70%都没有!这个问题如果也归咎为电源的问题,我觉得没有那么单纯! 所以请各位帮个忙,看看是不是还有其他的可能性!
你也知道别人大多是插上开机没有问题,热插拔有问题,你偏偏是个特例,所以你先不要怀疑CH375,如果CH375有问题,那其它人就会遇到和你一样的问题.我们公司现在还没有大范围在产品中使用CH375,主要是内部测试,用来做Flash烧录器(直接将优盘中的文件烧录进去),稳定性相当好,虽然有部分优盘不支持,但是绝对没有你说的夸张.如果不信我可以发段使用视频给你. 你说的插上开机会死在中断检测中,到底为什么死在中断检测中?是没有产生中断还是中断值出乎意料导致处理错误,这些问题你先解决了再来发牢骚吧. 我在刚开始做CH375时就遇到过死机,有部分原因是有些中断值开始认为不会出现,而出现这个中断值时系统死机.当然,如果你使用的是沁恒的库,当我没讲,人家是卖芯片的,你量不够人家不给源程序你也没有办法. 关于支持率,你不支持的优盘有哪些型号?我最近又试了一个SD读卡器和清华紫光的垃圾优盘,居然读卡器没有读出来,清华紫光的读出来了.所以支持率这东西,碰运气吧.不过我自己写的底层,还有可能性提高.
我使用的是沁恒的库,难道是内部处理有问题?Skunk你是自己做的库吗?能否给我参考一下? 支持率的问题我也觉得是在碰运气,同样是清华紫光的U盘,我用过四款,有三个可以很好的使用,基本上很少很少出异常,而有一款却从来就没有成功操作过!所以我才觉得支持率没有他们说的90%那么高! 至于我做的U盘只支持热插拔,跟踪测试了以下,初始化顺序如下: (1)发送命令0x06(检测CH375工作是否正常),写入数据0x65,读到数据为0x9A; (2)发送命令0x06(检测CH375工作是否正常),写入数据0x9A,读到数据为0x65; (3)发送命令0x01(读取芯片及固件版本),读到数据为0xA4; (4)发送命令0x15(设置U盘工作模式),写入数据0x06; (5)连续10次延时xDelay100uS (6)读到数据为0x15(检测到USB设备连接事件). (7)产生USB中断 当然这个是调用沁恒的库的到的结果!Skunk你帮我看看这个过程有问题吗?
你上面所说的初始化顺序是指插在上面开机的优盘初始化顺序?这几步是没有什么实际意义的,关键是后面的处理。现在就是搞不清这个中断处理函数是不是在内部直接把中断给处理了,如果是这样的话,你在得到源程序前几乎没有什么好查的了,他们也只是承认在量大的情况下会针对不支持的优盘添加代码。 我使用的是非常规单片机,源程序给你也几乎没有用,因为我是实时系统的。我在这儿发过好几次不使用库的初始化优盘,但也只是可以对扇区进行操作,没有到文件系统层。 不过我想起一种可能性,你一开机加一个比较长的延时看看。会不会你CPU已经开始工作时,优盘供电没有好,导致出现错误。
这一段时间有空的就时候就搞这个东西,至于支持率,我觉得是没有90%,我们用了很多U盘,估计一下支持率不到70%,这个支持率还可以接收啦,不过也只是测试了20多个左右的U盘,呵呵~~ 现在最最关心的问题,还是为什么别人不支持热插拔,而我的项目为什么只支持热插拔,先插上再上电读文件就是会失败!有时候可以读一个缓存的数据就死了,有时候是读出好一个缓存就死了,反正就是不能读完数据! 根据跟踪程序,我发现如果不插U盘的时候,初始化的时候为我在22楼所说的那样的步骤,只是没有中断信号,而有U盘再上电的时候,初始化多了一个中断,中断信号得到的状态是已经连接状态.只有一次中断就没有了! 而如果是热插拔的时候,有多次中断信号发生,前面两次都是告诉设备U盘已经连接,后面大概是六次吧,得到的的中断状态为"0X14"--应该是表示USB事务或者传输操作成功! 难道这里面有什么猫腻??有哪位知道的朋友,能否解答一下!非常感谢! T0:Skunk 你说的增加延时,我试过,没有什么作用!也许说的对,可能还是中断处理的问题!我调用的都是库函数,是不是需要改什么东西才行?
T0:Anna 我使用的是 CH375A 做并口主机通讯接口,现在遇到了和您一样的问题: 可以检测到U盘,但是不能正常读写文件,一操作读文件或者写文件就没反映了,死在了函数 void xQueryInterrupt( void )里面! 请问您现在这个问题解决了吗?是如何解决的?