[求助]375返回0x82

我是用375连接U盘,CH375LibInit和CH375DiskConnect都没问题,但是CH375DiskReady总返回0x82。请问这可能是啥原因

(1)U盘供电足么?应保证在4.7V以上 (2)把主程序贴出来看看,头文件位置有没有错?应放在库配置后面


电压4.7V

CH375Reset(); while(i != ERR_SUCCESS) /* 初始化CH375程序库和CH375芯片,操作成功返回0 */ { i = CH375LibInit(); } USART_SendStr(USART1, "Wait Udisk\n"); while ( CH375DiskStatus < DISK_CONNECT ) /* 查询CH375中断并更新中断状态,等待U盘插入 */ { if ( CH375DiskConnect( ) == ERR_SUCCESS ) ;//break; /* 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus */ mDelaymS( 100 ); } mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */ i=0xff; /* 检查U盘是否准备好,有些U盘不需要这一步,但是某些U盘必须要执行这一步才能工作 */ while(i != ERR_SUCCESS) { mDelaymS( 100 ); i = CH375DiskReady( ); //USART_SendStr(USART1,"Ready ?\n"); //if ( CH375DiskReady( ) == ERR_SUCCESS ) /* 查询磁盘是否准备好 */ // break; }

我是按照给的例子改的,CH375DiskSize也返回0x82。


头文件位置有没有错?应放在库配置后面

对这句话不是很理解…… 我用keil的


(1)头文件的位置 /* 以下定义的详细说明请看CH375HF3.H文件 */ #define LIB_CFG_DISK_IO 1 /* 磁盘读写的数据的复制方式,1为"单DPTR复制",2为"双DPTR复制",3为"单DPTR和P2+R0复制" */ #define LIB_CFG_FILE_IO 1 /* 文件读写的数据的复制方式,0为"外部子程序",1为"单DPTR复制",2为"双DPTR复制",3为"单DPTR和P2+R0复制" */ #define LIB_CFG_INT_EN 0 /* CH375的INT#引脚连接方式,0为"查询方式",1为"中断方式" */

#define CH375_CMD_PORT_ADDR 0xBDF1 /* CH375命令端口的I/O地址 */ #define CH375_DAT_PORT_ADDR 0xBCF0 /* CH375数据端口的I/O地址 */ /* 62256提供的32KB的RAM分为两部分: 0000H-01FFH为磁盘读写缓冲区, 0200H-7FFFH为文件数据缓冲区 */ #define DISK_BASE_BUF_ADDR 0x0000 /* 外部RAM的磁盘数据缓冲区的起始地址,从该单元开始的缓冲区长度为SECTOR_SIZE */ #define DISK_BASE_BUF_LEN 4096 /* 默认的磁盘数据缓冲区大小为512字节,建议选择为2048甚至4096以支持某些大扇区的U盘,为0则禁止在.H文件中定义缓冲区并由应用程序在pDISK_BASE_BUF中指定 */ #define FILE_DATA_BUF_ADDR 0x1000 /* 外部RAM的文件数据缓冲区的起始地址,缓冲区长度不小于一次读写的数据长度 */ /* 由于演示板用的62256只有32K字节,其中CH375子程序用512字节,所以外部RAM剩余长度为32256字节 */ #define FILE_DATA_BUF_LEN 0x6800 /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度 */ /* 如果准备使用双缓冲区交替读写,那么不要定义FILE_DATA_BUF_LEN,而是在参数中指定缓冲区起址,用CH375FileReadX代替CH375FileRead,用CH375FileWriteX代替CH375FileWrite */

#define CH375_INT_WIRE INT0 /* P3.2, INT0, CH375的中断线INT#引脚,连接CH375的INT#引脚,用于查询中断状态 */

#define NO_DEFAULT_CH375_F_ENUM 1 /* 未调用CH375FileEnumer程序故禁止以节约代码 */ #define NO_DEFAULT_CH375_F_QUERY 1 /* 未调用CH375FileQuery程序故禁止以节约代码 */

#include "..\CH375HF4.H" /* 如果不需要支持FAT32,那么请选用CH375HF4.H */ (2)电压再增大一些或换个U盘试试。


1没问题,u盘也换过了,看来问题麻烦了


检查UD+上的电压,看以下是几伏,大概3.0V以上.两个信号线是怎么连接的?有没有加一些电阻等元件,可以贴图看看.


UD+是3V,信号线直接连到375。图就有难度了,线是飞的


基本是你硬件问题,好好检查一下吧.3V其实已经偏底了.供电要充足.信号线尽量端点.还有看看UD+,UD-是不是接反了.


那就先提高电压看看,十分感谢


请问红桃六,你说的电压偏低是指d+?usb供电有5v的


usb供电提高到4.9v,UD+提高到多少算好?还有我是用Cortex-M3的,有影像么?


这个问题你主要去查下一个是USB口有没有串接电阻,USB4根线有没有连接错误以及中断引脚是否连接好。还有就是你可以拿示波器去看下USB的UD+和UD-两个信号线上面有没有信号?


这是一个调试通过的例程,对比一下你的程序是否有问题UploadImages/20087231045139.rar


没有传电阻 4根线是VCC,UD-,UD+,GND 中断脚的话 xWriteCH375Cmd(CMD_DISK_INIT); i=0xff; while ( i!= USB_INT_SUCCESS) { i = wait_interrupt(); } 这段没问题 CMD_DISK_INIT这个命令也能过


那到底哪个地方出现了0X82的错误呢?


只有登录才能回复,可以选择微信账号登录