好的 我今天晚上 在仔细的检查一下 !
结果 明天在说 !
按照上面说的 我都将进行测试 明天我给结果 !
luoye268268 你有QQ号吗 我们聊聊286708537
好的 我今天晚上 在仔细的检查一下 !
结果 明天在说 !
按照上面说的 我都将进行测试 明天我给结果 !
luoye268268 你有QQ号吗 我们聊聊286708537
我的 发现 ! 其实问题 是出现在 c = CH375_WaitInt(); CH375_WriteCmd( CMD_DISK_READ ); CH375_WriteData( (unsigned char)iLbaStart ); CH375_WriteData( (unsigned char)( iLbaStart >> 8 ) ); CH375_WriteData( (unsigned char)( iLbaStart >> 16 ) ); CH375_WriteData( (unsigned char)( iLbaStart >> 24 ) ); CH375_WriteData( iSectorCount ); c = CH375_WaitInt(); //这里 就是这里出问题 到这里时正确讲是 254 就是读了254个扇区 到这就下不去了
hcn 说的 大端小端问题 我觉得 datasheet上写的是 低字节 较低字节 较高字节 最高字节 就是有进位 按照这个顺序送数据 我觉得也是正确的啊 如果说有进位情况引起问题 那我的还没产生进位我想是这样的 主程序从 775扇区读取正确读取254扇区 到255时 送完lba和扇区个数 到c = CH375_WaitInt(); 就不行了 我解决不了
还有就是 hcn 说的 大小端互换 不符合 datasheet 还能读出 数据吗 ? 我没试过 但是这与数据手册不符啊
我卡了好几天了 大家帮忙啊
再次感谢
hcn luoye268268
按照说明书上面说的,先写低字节,在小端格式的单片机中,低字节在前,高字节在后,也就是说你上面的程序先送的是最高字节的数据,接着是次高字节的数据,再者是次次高数据,最后是低字节数据,这样的话,就不符合说明书上面所说的要求了
哦
那就得
CH375_WriteCmd( CMD_DISK_READ ); CH375_WriteData( (unsigned char)( iLbaStart >> 8 ) ); CH375_WriteData( (unsigned char)iLbaStart ); CH375_WriteData( (unsigned char)( iLbaStart >> 24 ) ); CH375_WriteData( (unsigned char)( iLbaStart >> 16 ) ); CH375_WriteData( iSectorCount );
对吧 我今天晚上是是 !
应该是这样: CH375_WriteCmd( CMD_DISK_READ ); CH375_WriteData( (unsigned char)( iLbaStart >> 24 ) ); CH375_WriteData( (unsigned char)(iLbaStar>>16) ); CH375_WriteData( (unsigned char)( iLbaStart >> 8 ) ); CH375_WriteData( (unsigned char) iLbaStart ); CH375_WriteData( iSectorCount );
hcn 我昨天晚上 实验了 ! 1、 A0 的情况 2、 大小端格式的情况
还是不行 跟以前的问题一样 ! 变换大小端 是不行的 !
我解决不了啊 !
hcn 帮帮我
这段程序是按照 本网站提供的51改成 avr 的 ! 可是就是不行啊 不知道51用这段程序是怎样实现的 !
他能实现吗 ? 一定要用 贵公司提供的库吗 ?
我都要转 sl811 了 !!!!
我晕啊
以你最初的程序为例,可能有以下错误: 1、#define CH375_CLOSE CH375_A0=1;CH375_CS=1;CH375_WR=1;CH375_RD=1 应该改为CH375_A0=1在最后,因为在CS/WR/RD的下降沿检测A0,过早地撤到A0会导致命令/数据异常 2、for(i=775;i<65535;i++) //775 568 应该尽为i=0;.....,有的U盘第一次读操作必须是0#扇区,不能跳过
顺便说下,该程序包括所有类似的采用移位的例子程序,都完全没有大小端问题
收到 我试试
void CH375_WriteCmd(unsigned char cmd) // 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 { delay_us(2); // 2一定要2US,不然会出问题 CH375_A0=1; // A0=1 CH375_DATA_PORT=cmd; // 放好数据 CH375_DATA_PORT_OUT; // 方向输出 CH375_CS=0; CH375_WR=0 CH375_RD=1; DELAY500ns; //最少500NS CH375_WR=1; CH375_CS=1; //CH375_WRITE_CMD_OK; // A0=1 CS=0 WR=0 RD=1 delay_us(1); // 1 // 发出命令码前后应该各延时2uS,对于不快的单片机可以不需要延时 //CH375_CLOSE; // A0=1 CS=1 WR=1 RD=1 命令状态关闭 CH375_DATA_PORT_IN; // 数据方向输入 delay_us(2); // 延时2US
}
void CH375_WriteData(unsigned char data) //向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 { CH375_DATA_PORT=data; // 放好数据 CH375_DATA_PORT_OUT; // 数据方向输出 CH375_A0=0; CH375_CS=0; CH375_WR=0; CH375_RD=1; DEALY500ns();//延时500NS CH375_WR=1; CH375_CS=1; //CH375_WRITE_DATA_OK; // A0=0 CS=0 WR=0 RD=1 //delay_us(5); // 1 //CH375_CLOSE; // A0=1 CS=1 WR=1 RD=1 命令状态关闭 CH375_DATA_PORT_IN; // 禁止数据输出 delay_us(1); // 1 // 延时 } unsigned char CH375_ReadData(void) //从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 { unsigned char d; delay_us(1); // 1// 延时不超过5US,否则会出问题 CH375_DATA_PORT_IN; // 数据输入 // CH375_READ_DATA_OK; // A0=0 CS=0 WR=1 RD=0 CH375_CS=0; CH375_WR=1; CH375_RD=0; DELAY500ns(); d=CH375_DATA_PIN; // 读引脚数据 CH375_RD=1; CH375_CS=1; // delay_us(1); // CH375_CLOSE; // A0=1 CS=1 WR=1 RD=1 命令状态关闭 return d; } 你可以使用这三个读写子函数,还有就是你的单片机的晶振是多少?延时不能太长,我这边测试过,用的是AVR128单片机,总线方式,读500个扇区都没问题
我的晶振 是 8M 我用的是 CVAVR 的 delay.h 里面的 delay_us() 函数 精确问题 我想应该可以 !
我用的是 mega8 mega162 没用总线 是IO 模拟的 程序你可以看出来
按照大家的 建议 我在是是 我会尽快给结果的 !
程序通过了 十分感谢大家 是 店小二的问题 ! 同时 hcn 给我很大的帮助 !
结论: 要十分注意 时序的正确 ! CH375还是很好的 ! 支持一下 !
再次感谢:
hcn 店小二 luoye268268 ffly
谢谢大家
能不能给我一份ch375.lib啊,我前天申请了权限,为什么还不让我下载啊?