我也是这么想的,可我刚才实验了一下,好像还是有问题,我发送命令22H,结果发送寄存器中的数据是15,而且有奇偶错误状态出现!该怎么解决呢?
请教一下:主控芯片和375之间电平相同不用加max232,但因为我用的是以前的板子,直接用跳线连接的375,板子上面还是有一个232在工作,会不会影响数据的发送啊?
我也是这么想的,可我刚才实验了一下,好像还是有问题,我发送命令22H,结果发送寄存器中的数据是15,而且有奇偶错误状态出现!该怎么解决呢?
请教一下:主控芯片和375之间电平相同不用加max232,但因为我用的是以前的板子,直接用跳线连接的375,板子上面还是有一个232在工作,会不会影响数据的发送啊?
我用寄存器保存了从开始到磁盘准备好过程中发送和接收到得数据(都是16进制的): 发送出的数据(命令和数据):06 65 01 15 06 22 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 22 0A 20 接收到得数据:09 FF B7 15 FF 15 A1 15 A1 15 A1 15 A1 15 A1 15 A1 15 A1 15 A1 15 A1 15 请帮忙分析一下可对?我对着375的命令说明有很多与它不对应,发送的数据不相同!为什么?帮忙看看我的u盘可初始化好了?可能进行读写?谢谢!
说明:初始化和查看磁盘是否准备好都已经通过![Emot]27[/Emot]
把串口上的max232去掉,测试命令是否可以通过,可以先不使用库函数,直接读写U盘的物理扇区,看看是否可以成功?参考CH375EVT\PUB\MCS51C\MISCELL下面的例程.
上面的数据都是去掉232以后的测试数据!从数据看测试可以通过,但好像获取最大逻辑单元号一直不能发送38H,谢谢_study_ ,我就先按照你的办法测试一下!
对于直接读写u盘的物理扇区,CH375的命令端口和数据端口的地址如下: 这个地址是什么意思?怎么理解,我可以直接使用?
这个地址是通过CS、AO计算出来的,符合要求的很多,这只是其中一种 CS = 0, A0 = 1:命令口地址 CS = 0, A0 = 0:数据口地址 其中CS是有A15,A14,A13、A12译码产生,A0接A8 下载EV375PCB.ZIP,参考原理图,只要你的硬件连接也可以产生这个地址且不与其他器件冲突,就可以用
这是51下面用总线方式设置的地址(由硬件决定),你是用串口的,只需要使用串口读写的三个子函数就可以了
谢谢!这个问题我本来想删掉的,结果没看到哪里有删除!程序修改中。。。
我按照CH375EVT\PUB\MCS51C\MISCELL把程序修改了,还是不行!初始化都是好的,但在获得获取设备描述符的时候只能得到数据长度,然后读取数据的时候就会一直等待了?好像程序就不能连续读取数据似的!!!
请教一下:获取的设备描述符只有17个字节,有没有错误?现在usb地址已经设置好了,我怎么操作来读取扇区呢?
17个不对,应该是18个,很奇怪,怎么少一个,你把你获取的描述符贴出来看以下,少了哪个字节. 至于怎么读扇区,你参考的程序里面已经有了,建议您先仔细看一下整个程序的详细步骤操作流程后再做实验,避免不必要的错误.
不好意思 是18个!我现在遇到一个很奇怪的问题,我按例程写的程序,全速运行怎么都运行不了获取设备描述符,但我在仿真环境下在设置工作模式为7后停一下再运行就可以很顺利的完成操作,一开始我以为是延时的问题,可我在停的地方加上10秒的延时它照样还是不能读描述符!这是为什么? 全速运行得到的描述符长度是20!不是18 !!!!晕了 !
按照这个流程: set_usb_mode( 6 ); /* 设置USB主机模式 */ while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待USB设备连接上来 */ set_usb_mode( 7 ); mDelaymS( 10 ); set_usb_mode( 6 ); mDelaymS( 100 ); while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待USB设备连接上来 */ ***** 正常操作 **** 测试以下.设置模式7后一定要延时,但是不能这么长,这是一个复位信号.
uint8 CH375LibInit( void ) /* 初始化CH375程序库和CH375芯片,操作成功返回0 */ { unsigned char c,i; xWriteCH375Cmd(0x15); xWriteCH375Data(6); for(i=0xff;i!=0;i--) { c=xReadCH375Data(); if(c==CMD_RET_SUCCESS)break; } if(i!=0)return(USB_INT_SUCCESS); else return(0xff); }
i = CH375LibInit( ); /* 初始化CH375程序库和CH375芯片,操作成功返回0 */ mStopIfError( i ); while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查询CH375中断并更新中断状态,等待U盘插入 */ //mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */ while( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); xWriteCH375Cmd(0x15); xWriteCH375Data(7);//reset 375 mDelaymS( 10 ); CH375DiskStatus=0; xWriteCH375Cmd(0x15); xWriteCH375Data(6); mDelaymS( 100 ); //i=CH375LibInit();// initial 375 //mStopIfError( i );// judge whether 375 is successfully initialed while( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); i=mCtrlGetDescr(1);//to get the USB's signature longth=mReadCH375Long();
这是我的程序,设置模式7后不管延时不延时得到的longth都是20!是我哪里有问题吗?
这是它读到得20位描述符数据(十六进制):12 12 01 00 02 00 00 00 40 07 13 65 01 00 01 01 02 03 01最后一位一直是读不到得,这是前19位,正确的数据应该是:12 01 00 02 00 00 00 40 07 13 65 01 00 01 01 02 03 01 帮忙分析一下,谢谢!为什么会使两个12