我用375B,自己写的程序,在仿真器上没有问题,能在U盘建立文件。把它烧进ROM片子,实际运行则会写乱U盘,既:插上计算机,无法点开,显示“文件或目录损坏”。只能不厌其烦改一次程序,烧录运行一次。发现在修改FAT表处就出问题。 具体来说就是: (1)读U盘可以,一旦写就不行。我试着读出FAT表,不做任何修改,原样原地址写回,在仿真器上当然正常,烧入片子运行就不行,用winhex看,发现FAT表有变,表头有的FF变成了0F或7F,难怪说文件损坏。我没改FAT表,所以应该不是FAT表,修改程序的问题吧? (2)写入片子后,读扇区正常,写入到扇区子函数开始的往CH375送指令,数据等也正常(不死U盘),仅在循环送入数据后死掉(当然是因为送入的数据不知何故改变了) (3)偶尔会写正确,平均写7.8次扇区,正确一次。 请教各位大师:既然在仿真器上正常,写入片子后,操作375也正常,只有在循环送入数据后死掉(且偶尔会写正确),可能是什么原因?是否我的程序并无问题,只是硬件受到干扰?什么不稳定(电压之类)?或者别的原因?[Emot]4[/Emot]
补充:我用的是上海星研得仿真器STAR16L,单片机是196KB。烧入片子后,别的程序运行正常,包括CH375与计算机通信
(1)仿真器与芯片相比,速度要慢一些,即操作CH375的时序也会慢一些 (2)检查CH375的接口函数时序与芯片的速度是否匹配:命令后延时1.5uS,数据后延时0.6uS (3)直接写物理扇区试试,仅写入一个扇区,分析一下哪个步骤出错 (4)“循环送入数据后死掉”与“当然是因为送入的数据不知何故改变了”没什么关系,U盘本身不关心写入什么数据
我是命令后延时2uS,数据后也延时2uS并因此能多读写2块U盘(当然是在仿真器上) 如果仿真器与芯片相比,速度要慢一些,即操作CH375的时序也会慢一些,我该修改什么?延时更长?还是修改别的? 直接写物理扇区试试,仅写入一个扇区,在相继送入LBA地址,每包长度(64字节),写入扇区数(1扇区),LBA地址,每包长度(64字节),写入扇区数后,送入写数据指令,等待中断状态为1EH后(到此都是正确的),循环送入数据后,用winhex看,LBA地址,每包长度(64字节),写入扇区数都正确,就是写入的数组内容不知何故改变了
(1)芯片的速度快,根据芯片的速度调整延时,使之符合命令后延时1.5uS,数据后延时0.6uS (2)CH375与U盘之间的数据含CRC校验,这部分数据传输不会错,那么应该是单片机CH375之间的数据出错了 <1>磁盘初始化、获取容量成功没? <2>对比一下写扇区的流程是否正确,下载CH375EVT.ZIP,参考MISCELL下的例程, <3>写入特征数据,如:0x55,看一下出错数据是否有规律
一定要严格延时为命令后延时1.5uS,数据后延时0.6uS吗?我不是太严格,再试试吧 单片机CH375之间的数据为什么会出错了,仿真器上完全正确的,仅仅就是因为实际的MCU和仿真器的速度有差异,导致延时不准确吗? 磁盘初始化都成功(包括三块不能读出的U盘)获取容量从未成功(在仿真器上能正确读写的8块U盘) 我在看看CH375EVT.ZIP 我写入未修改的FAT表扇区,表头有的FF变成0F,7F或00H
延时时间主要是对于高速单片机,大于这个这个时间基本上就可以,如果获取容量不成功,可以发送CMD_DISK_R_SENSE 命令,获取磁盘的错误状态,然后重试,一般循环获取5次就可以了
唉,以前试过,再试试吧!只是硬件受到干扰?可是在烧入片子后,写入的数组内容不知何故改变了。到底是不是什么不稳定(电压之类)?或者屏蔽做得不好,电磁干扰导致数据传输错误?
我发现再读出扇区数据时有时正确,有时要起变化(并且如果这次数据有变化,会比正确读取一个扇区耗时久点),是不是连接375的插座和usb线的插头接触不良的原因? 因为有时连初始化也老通不过(此时U盘灯闪烁,375的发光管,亮着,不闪烁),用手压一压插头,就初始化成功
耗时久可能是读出的数据出现了错误,分析文件系统时无法通过,CH375试图在去不断的读。 建议USB接口外壳要接地。USB平行走线。CH375的UD+,UD-到USB接口的线尽量短些。
谢谢我立即再试试,改改线,看行不行! 不知道为何仿真器环境下没有这问题?
唉,极度不稳定,写3,4次才能正确一次。到底是哪里出了问题
经过改线后,情况有没有改善? 你可以直接写物理扇区,或者读扇区,看看有没有错误.如果总线上有问题的话,不会就错那几个固定数据的.所以你测试一下读扇区.写扇区看看有没有问题,以便于确认是库里面有问题还是硬件出现问题了,.仿真器和真实的硬件还有一个区别那就是RAM大小可能会不一样的.目前使用的RAM是多少?
还没有,今天刚搞到一根屏蔽线,明天立即换上试试! 直接读扇区的错误就是如上所言!不稳定。时对时错 ram好像是64K
和375B的晶振(12M的),电容有没有关系?
电容和晶振有关系,一般都用15P-47P的,越小越容易起振,越大震荡越稳定