我用ch375Libinit()时, CH375GetVer()=0x30,可是CH375Init()=0xff, 其他如CMD_DISK_INIT 动作正常,为何会这样? 另ExecCommand无中断回应, unsigned char ExecCommand( unsigned char cmd, unsigned char len ) { unsigned char i, j, status; unsigned char data *buf; CH375HM_INT_EN = 0; CH375HM_INDEX_WR( 0 ); delay2us(); CH375HM_DATA_WR( cmd ); delay2us(); CH375HM_DATA_WR( len ); delay2us(); if ( len ) { i = len; buf = (unsigned char *)&mCmdParam; do { CH375HM_DATA_WR( *buf ); buf ++; } while ( -- i ); } mIntStatus = 0xFF; CH375HM_INT_EN = 1; CH375HM_STA = 0; while ( mIntStatus == 0xFF ); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^==========>程序停在这,请问为什麽会这样?
1.给头文件中ch375Libinit()函数中的if ( CH375GetVer( ) < CH375_LIB_VER ) return( 0xFF );屏蔽掉看能不能正常操作. 2.命令没有发下去,检查下硬件连线有没有问题,时序和地址有没有问题.
不行喔!我这是在return( CH375Init( ) ); 这里回传0xff 另外在执行 i=CH375FileCreate();会回传0x1f
库初始化都没有成功,对文件进行操作是不可能成功的,对CH375初始化没有成功,你在测试命令成功后,设置Ch375的工作模式,看模式可设置成功了.
初始化成功了,是因为之前的回传值格式不正确的关系所以误判了,CMD_Set_USB_Mode=6,也成功了, 但是DISK_INIT return 0x15,DISK_Query_Status return 0x1F, 这是什麽原因?
i=CH375LibInit(); printf("LibInit value = %02X\n",(unsigned short)i); ====> return 0x00 OK mInitINT(); while (!set_usb_mode( 6 )) ; =====>return 0x00 OK while (1) { CH375_WR_CMD_PORT( CMD_DISK_INIT); printf("mIntStatus = %02X\n",mIntStatus); ====>return 0x15 ? mDelay100mS( ); mDelay100mS( ); i=CH375DiskQuery(); printf("Disk Query Status = %02X\n",(unsigned short)i); ====>return 0x1F ? for ( i = 0; i < 5; i ++ ) { mDelay100mS( ); printf( "Ready ?\n" ); if (CH375DiskReady() == ERR_SUCCESS) ====> return 0x00 OK { printf("Disk Ready!!\n"); break; }else { printf("Disk Not Ready!!\n"); } } ...... 就是对Disk下指令就会有错误讯号
用我们足程序库操作的话,大体步骤是: 1、库的初始化:CH375LibInit( ),这步中包含了设置模式6,也就是下面不需要再set_usb_mode( 6 ) 2、检测U盘插入:CH375DiskConnect( ); 3、延时几百毫秒,等待U盘稳定; 4、检查U盘是否准备好:CH375DiskReady( ),CH375DiskReady( )能正常通过的话,后面的操作一般都不会有什么问题; 5、CH375DiskReady( )之后,可以进行其它文件相关操作。 你最好不要即用子程序库中间又加自己单独往下发命令码,以为有些命令发完之后,没有去获取的话,可能造成后面操作不正常的。 还有就是U盘的初始化,子程序做的比自己往下发命令完善的多,中间加了不少出错处理的。
还是不行,程序如下 i=CH375LibInit(); ====>return 0x00 OK printf("LibInit value = %02X\n",(unsigned short)i); mInitINT(); while ( 1 ) { while (CH375DiskConnect()!= ERR_SUCCESS) ; ====>return 0x00 OK mDelay100mS( ); mDelay100mS( ); for ( i = 0; i < 5; i ++ ) { mDelay100mS( ); if (CH375DiskReady() == ERR_SUCCESS) =====>return 0x00 OK break; } strcpy( mCmdParam.Create.mPathName, "//PINTEK.TXT"); i=CH375FileCreate(); mStopIfError( i ); ====> return 0x1F False
CH375FileCreate()仍然无法正常执行
这样,你看下你的单片机的磁盘缓冲区DISK-BASE-BUF,你测试下看有没有问题
我是用贵公司的模拟板在做实验, 程序不大, 使用89S52( code size < 8K) CH375HF6.H: #ifdef EN_SEC_SIZE_AUTO UINT16X CH375vSectorSize; <=====这里有修改 #else #define CH375vSectorSize 512 #endif PUINT8X pDISK_BASE_BUF; <=====这里有修改
CH375HM.C unsigned char xdata DATA_BUF[ 512 * 64 ] _at_ 0x0100; <=====这里有修改 unsigned char xdata *buffer _at_ 0x8100; <=====这里有修改
磁盘缓冲区DISK-BASE-BUF,没有摸拟器不好测试
用Keil complier时会有下面的错误信息, Device处改为89C55, Memory Model:Large仍然会出现下面信息 *** WARNING L14: INCOMPATIBLE MEMORY MODEL MODULE: ..\..\MCS51\FILELIB6\CH375HF6.LIB (CH375DSZ) MODEL: SMALL
那你程序编译之后的代码是多少?按照你说的8K的话,可能用我们的库程序空间不够,除非你外扩ROM才可以。至于出现了上面的警告的话,是因为我们库在编译的时候是采用的SMALL的模式来编译的,而不是采用LARGE模式编译,所以会出现上面的警告。
Program Size: data=99.5 xdata=33358 code=8153 =====〉(<8K)
这份是测试程序, 所以内容很简单 void main(void ) { unsigned char i, c, SecCount; unsigned long OldSize; unsigned short NewSize, count;
LED_OUT = 0; mDelay100mS( ); mDelay100mS( ); LED_OUT = 1; mInitSTDIO( ); i=CH375LibInit(); printf("LibInit value = %02X\n",(unsigned short)i); mInitINT(); while ( 1 ) { i = 0xFF; while (i != ERR_SUCCESS) { i = CH375DiskConnect(); printf("Disk Connect detect = %02X\n",(unsigned short)i); } mDelay100mS( ); mDelay100mS( ); LED_OUT = 0; for ( i = 0; i < 5; i ++ ) { mDelay100mS( ); if (CH375DiskReady() == ERR_SUCCESS) { printf("Disk Ready!!\n"); break; } } i = CH375DiskSize( ); mStopIfError(i ); printf( "Disk Total Size = %u MB \n", (unsigned int)( mCmdParam.DiskSize.mDiskSizeSec * ( CH375vSectorSize / 512 ) >> 11 ) );
strcpy( mCmdParam.Create.mPathName, "\\TEST.TXT"); i=CH375FileCreate(); mStopIfError( i ); printf( "Close\n" ); mCmdParam.Close.mUpdateLen = 0; i = CH375FileClose(); mStopIfError( i ); } }
如果你是拿我们的评估版的话,那么,你的RAM空间溢出了,我们375评估版上面的RAM是32K,将你的DATA-BUF减小试下看可以不可以
确实如此,减小了以后就没有错误信息了, CH375FileCreate()也可以正常开启 可是CH375DiskSize()会回传不正确
"因为我们库在编译的时候是采用的SMALL的模式来编译的,而不是采用LARGE模式编译" 我用的試FILELIB5.lib,在調用CH375前編譯內容:Program Size: data=96.6 xdata=1557 code=37941 用的已經是large方式,請問如何處理才能正常調用lib?