我用的是CH375S的芯片做为host,MCU为16位机。 在测试传输速度时,发现传输速率只有30K/S,传一个4M的文件居然要8分钟。 经测试发现芯片在响应传输成功中断时,与上次中断之间的延时竟达到了十多毫秒,请指教。
你用的是扇区方式还是字节方式,如果是字节方式的话,那速度是不会很快的,同时,你在以扇区写的时候,当一次往下写的数据最好是16K的数据,这样的速度是比较快的
速度问题主要和你的MCU有关系,你数据口写入一个字节需要多长时间???还有就是跟写入方式有关系,字节写比扇区写慢,扇区写每次尽可能的多写几个扇区速度也会相应的提高.
请问如何来测读写速度呢?
1、我用的是扇区写入方式,FAT16格式,自已参照文档写的,经测试过我部分代码不会有太大的问题。 2、我使用的单片机是16位机,晶振4M,内部倍频至12M,相当于51的144M(12clock),速度也不应该成问题。 3、64个字节的写入时间(不包含最后一个成功传输的中断)大概只需要1ms,包括最后一个中断后,时间就 需要10多快20ms了,照这种速度也就是32Kbyte/s。 4、操作USB时采用查询的方式,所有中断被屏蔽,不会被别的任务打断。 综上,传输时间就是消耗在读/写扇区中,是不是CH375不够快呢,盼请答复。
没人理,没劲。
你用扇区方式下,一次写多少个扇区呢?你如果一次写一个扇区,那么每次就9个中断,你如果一次写2个扇区,那么,就是17个中断,这样就少了一个中断,所以我们建议每次最好写多点的扇区,比如一次16K,还有和你的U盘有关系,不同的U盘速度是不一样的
1、我的写缓冲区是3K(6个扇区),因为器件自身的原因,缓冲区不能再扩大。 2、再者即使各种U盘的速度不一样,也不致于慢到这个地步。 3、是否存在USB的CRC16检验错误而导致375一直重发才达到如此大的延时。
64字节1MS 那麽 1字节1/64=15US,1K至少15MS 最多你的速度只能64K,那麽真正的数据写入速度应该在该速度的2/5(1扇区)---12/16(16扇区)左右.假如你写入一字节在2-3US那麽你的速度理论上应该提高5--7倍.
按照我的理解,1ms时间(64个字节)应该是375芯片内部固件对上位机写入数据的应答,而没有真实地发送给U盘,所以你的66K应该不能这样算,而是应该从上位机写第一个64个批量数据开始,在写完扇区的总数倍之后,上位机得到375成功的应答为止,这才表示芯片已成功将数据发送给了U盘,而恰恰这段时间才是致命 的长。楼上的这段话“那麽真正的数据写入速度应该在该速度的2/5(1扇区)---13/16(16扇区)左右”应该时间不是变小了,而是变大了。我没有研究过贵公司的固件程序,所以只能猜测。
首先你要找出你往375写64字节的数据怎么会1MS,正常的情况下,单片机写64字节的数据到375的时间为60US左右,而375发出去和得到USB设备返回的时间为100US左右,这样可以算出速度为400K/S,而你写一次64字节就要1MS的时间,那当然速度就会很慢.
说几句吧. 1 在内部固件方式下,写64字节数据按说明书要求每字节间隔2us,所以等待时间加起来就是128us,在加上单片机 处理时间,会接近1ms的. 2 在送出64字节后,等待中断的时间才是决定读写速度的关键,我实际测试过,应该速度在30KB/S左右.
作为一般的单片机系统,数据量不大已经可以使用了.
1,你说"每字节之间的时间间隔为2US",而实际上说明书上说的数据与数据之间的时间间隔为1US,这样的话,等待时间就是我所说的60US左右. 2.在送出63字节之后,CH375将数据传送给USB设备,USB设备在返回数据给375,大概在100US左右,在响应中断(2US),撤消中断(2US),这时间怎么也不会到达1MS吧. 3,要不你把你读和写的程序贴出来看下撒,会不会在读和写的过程中有什么问题存在?
晕,哪有这样写程序的! 第一,数据要CPU事先都准备好,越多越好。以免一边操作U盘一边要准备数据源,当然,特殊情况除外,但也要尽可能保证有最多的可写数据。 第二,写扇区的时候,要一次写满一个扇区,中断9次,最后一次时间才最长,因为这个时间才是写入时间,这个时间取决于U盘(即使这个时间其实也不长),前8次都是将数据送给U盘的控制器,速度根本不是问题。
请尽快把程序发上来大家看看吧,并请告知哪边浪费了时间,浪费了多少 375应该不至于慢成这样的