CH375V的CH375HF9.LIB(ARM32下)库文件大家使用有没有什么问题呀

我发送测试命令时都比较正常,发送00x55,返回反码0XAA,按照CH375手册里描述的命令单独发送命令时返回都正常,但就是执行库文件中提供的CH375LibInit()或CH375Init( )函数时就返回0x81,我用的是CH375HF9.LIB和CH375HF9.H头文件,请各位指点!

U8 CH375VInit(void) { U8 i; xWriteCH375Cmd(CMD_RESET_ALL); //复位CH375V DelaymS(100); xWriteCH375Cmd(CMD_CHECK_EXIST); //测试工作状态 xWriteCH375Data(0x65); i=xReadCH375Data(); //此时返回0x65的反码“0x9A” xWriteCH375Cmd(CMD_GET_IC_VER); //获取版本号 i=xReadCH375Data(); //“为何此处返回0x01” xWriteCH375Cmd(CMD_SET_USB_MODE); //设置USB工作模式 xWriteCH375Data(0x04); //切换到未启用的USB主机方式 mDelayuS(50); i=xReadCH375Data(); //"为何此处返回0x04" return i; } 以上为我写的一个初始化程序,执行测试命令时发送0x65,返回0x9A正常,为何后面发送的设置USB工作模式和获取版本号命令,返回的为发送的测试命令代码,而没有相应的操作状态输出,请问是什么原因,请各位高人指点一二,小弟感激不尽!


你自己将模式设置为0X06试下看可以不可以设置成功??


按照您的建议,我设置成0x06,情况还是一样,返回的也为0x06,并且\INT口线一直为高电平,我上面的测试工作状态命令能正常返回,是不是就应该能说明,我软件发送命令,数据这一块没有什么问题了,我看了一下,贵公司的例程是基于LPC的,在S3C44B0X下跑是否会存在什么别的问题呢,请指教!并且前面返回版本号也不对,请指教!


测试命令能通过的话,一般来说设置模式肯定没问题的。你将模式设置成0X06之后,并不去读取该命令的操作状态,直接插上U盘,看一下中断引脚#INT是否会拉地,#ACT是否会拉低。


这位仁兄,我这样测试,却是如你所说,#INT会拉低,#ACT也拉低,但是之前那样发送命令返回不对的话,是什么缘故呢,不知道你遇到过没有,还有,这样一来,我对U盘的文件级程序操作不能调用LIB库文件的相关函数了,因为它里面涉及到很多读状态操作


按你所说的插上U盘之后,#INT,#ACT拉低的话,其实设置模式已经是设置成功的。要不你把你的三个读写子程序贴出来看一下,会不会是时序上存在小问题。


我的程序中采用的是nGCS2的片选信号,A01选择命令和数据模式,并且延时程序我都用示波器调试过了的,标准的1uS延时,请帮忙看一哈,多谢了

#define WrCmd (*(volatile unsigned *)0x04000002) //CH375写命令地址 #define RWData (*(volatile unsigned *)0x04000000) //CH375读写数据地址

U8 xReadCH375Data(void) { U8 mData; mDelayuS(2); mData=RWData; return( mData ); }

void xWriteCH375Cmd(U8 mCmd) { mDelayuS(3); //至少延时1uS WrCmd=mCmd; mDelayuS(3); //至少延时2uS }

void xWriteCH375Data( U8 mData ) { RWData=mData; mDelayuS(2); }


U8 CH375VInit(void) { U8 i; CH375LibConfig = LIB_CFG_VALUE; xWriteCH375Cmd(CMD_RESET_ALL); //复位CH375V DelaymS(100); // xWriteCH375Cmd(CMD_CHECK_EXIST); //测试工作状态 // xWriteCH375Data(0x65); // i=xReadCH375Data(); //此时应返回0x65的反码“0x9A” xWriteCH375Cmd(CMD_GET_IC_VER); //获取版本号 i=xReadCH375Data(); xWriteCH375Cmd(CMD_SET_USB_MODE); //设置USB工作模式 xWriteCH375Data(0x06); //切换到未启用的USB主机方式 mDelayuS(50); i=xReadCH375Data(); return i; }

我刚才又做了个测试,将上面的初始化函数里的测试工作状态那两行去掉,直接查询版本号,回来的数据为0xA4,应该算是一个标准字符,但ARM库里定义如果版本号小于0x30则为错误,请问这是怎么会事情呢?是不是每执行一次有状态输出的命令之前,要复位一下USB芯片吗?我如果连着执行的话,则输出的始终为最后写入的数据或命令,万分紧急,请各位坛子里的高手不吝赐教,小弟先行谢过了


发CMD_GET_IC_VER命令获取的是芯片及固件版本,按375芯片说明手册你返回的0XA4是正常的; 而你所说的:ARM库里定义如果版本号小于0x30则为错误,这个是对于库里面所提供的函数CH375GetVer( )而言的。也并不是你所说的:每执行一次有状态输出的命令之前,要复位一下USB芯片。 还有就是开始我以为你采用的是模拟并口方式,所以担心你三个读写子程序上存在问题。


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