请教调用文件级库函数的问题

请问调用 CH375 文件级库函数的时候,是否只需要将头文件 CH375HF?.H 和 CH375HF?.LIB 文件添加入工程项目文件列表和文件夹中,并在程序中声明 #include "CH375HF?.H" 即可?(我尝试过同时声明 #include "CH375HF?.LIB",但编译时报错,我使用的是 Code Warrior IDE 编译器 ) 在编译之后,只有有具体程序命令的子函数程序,如 xWriteCH375Cmd( ),TEST_CH375_PORT( ),等被识别(函数名的颜色发生改变),而文件级子程序函数,如 CH375FileOpen( ),CH375FileCreate( ),CH375DiskConnect( ),等未被识别(函数名的颜色无变化),但编译并不提示错误。 请问在此情况下,文件级子程序库函数是否能够正常运行?如果不能,请问应该如何正确调用文件级库函数? 我在调用 CH375FileOpen( ) 库函数时,有的 U 盘运行时,会停在头文件 CH375HFQ.H 中的 xQueryInterrupt( )的 while(CH375_INT_WIRE) 命令行不再运行,有的 U 盘则完成 CH375FileOpen( ) 函数后,返回错误代码 0x1F,(两种情况下,状态参数CH375DiskStatus 都等于 0x10)。请问这有可能是什么原因造成的?

具体的库的链接你可以参考:http://www.wch.cn/bbs/View.asp?S=101&I=1511,只要按照我们上面的说明的话,库就可以正常的运行,如果FILE-OPEN()出现问题的话,那么你前面的DISK-READY()函数返回什么样的状态,以及你可以检测到U盘的链接吗?


Disk_Ready ( ) 返回值为 0x00,U 盘初始化程序 mInitDisk( ) 的返回值也是 0x00,可以检测到 U 盘.


我使用的几种 U 盘具体信息如下: WinHex 14.1 SR-6 2007-08-21, 10:19:56

驱动器G: 文件系统: FAT16 名称: MINIKING 总计容量: 57,544,704 字节 = 54.9 MB 总计扇区数: 112,392 可用扇区: 111,920 第一数据扇区: 472 字节/扇区: 512 字节/簇: 1,024 剩余簇: 55,960 = 100% 空闲 总计簇: 55,960 FAT1 = FAT2

驱动器G: 文件系统: FAT16 名称: KingSton 总计容量: 526,385,664 字节 = 502 MB 总计扇区数: 1,028,097 可用扇区: 1,027,552 第一数据扇区: 536 字节/扇区: 512 字节/簇: 8,192 剩余簇: 64,222 = 100% 空闲 总计簇: 64,222 FAT1 = FAT2

驱动器G: 文件系统: FAT16 名称: 超速王 总计容量: 131,842,048 字节 = 126 MB 总计扇区数: 257,504 可用扇区: 256,968 第一数据扇区: 536 字节/扇区: 512 字节/簇: 2,048 剩余簇: 19,544 = 30% 空闲 总计簇: 64,242 FAT1 = FAT2

驱动器G: 文件系统: FAT16 名称: 金星 MP3 总计容量: 124,631,552 字节 = 119 MB 总计扇区数: 243,421 可用扇区: 242,908 第一数据扇区: 512 字节/扇区: 512 字节/簇: 2,048 剩余簇: 60,726 = 100% 空闲 总计簇: 60,727 FAT1 = FAT2

请问 CH375A 是否支持这几种类型的 U 盘?如果能够支持,为什么我在调用 CH375FileOpen( ) 库函数时,"超速王" U 盘运行时,会停在头文件 CH375HFQ.H 中的 xQueryInterrupt( )的 while(CH375_INT_WIRE) 命令行不再运行,其他 U 盘则完成 CH375FileOpen( ) 函数后,返回错误代码 0x1F ?


请问有没有人知道上述类型的 U 盘是否能够被 CH375 所支持啊? 如果能够支持的话,导致 CH375FileOpen( ) 库函数返回错误代码 0x1F 的原因可能是什么啊? 谢谢!非常感谢!


从U盘参数上看,375都能够支持 在CH375FileOpne()之前的CH375LibInit()和CH375DiskRead()通过没? 若没,那么错误代码是多少?


CH375LibInit() 通过了,CH375DiskReady( )也通过了,返回值均为 0x00 .


这两步能正常通过,打开文件CH375FileOpen( )返回错误代码 0x1F的话,可能与定义的磁盘缓冲区有关,你检查一下512字节的磁盘缓冲区定义是否正常,还有可能与速度有关,三个读写子函数速度太慢的话,也可能会出现这种情况。


我定义的磁盘缓冲区如下: #define DISK_BASE_BUF_ADDR 0x0900 #define FILE_DATA_BUF_ADDR 0x0B00 #define FILE_DATA_BUF_LEN 0x0400 运行完 CH375FileOpen( ) 之后,DISK_BASE_BUF[512] 中,[0]=0x00,[1]=0x00,[2]=0x05,....[507]=0xac,[508]=0xcb,[509]=0xd8,[510]=0x55,[511]=0xaa,应该读取的是 #0 扇区中的数据.FILE_DATA_BUF[1024]中也显示有数据被读入( 但不知道数据的来源和具体意义 ). 我用的是 MOTO 的 MC9S12DJ64 单片机,采用 16 M 晶振 ,1uS 延时定义如下: void mDelay1uS( ) // 至少延时1uS,根据单片机主频调整 { asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP"); asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP"); } xWriteCH375Cmd( ) 中起始和结束处各延时2uS,xWriteCH375Data( ) 结束处延时2uS,xReadCH375Data( )起始处延时2uS. 请问以上做法是否合适? 谢谢!


难以置信! 我把 void mDelay1uS( ) 修改为: void mDelay1uS( ) // 至少延时1uS,根据单片机主频调整 { asm("NOP"); } 已经延时如此之短的时间了,可是调用 CH375FileOpen( ) 还是返回错误代码 0x1F,或者停在头文件 CH375HFQ.H 中的 xQueryInterrupt( )的 while(CH375_INT_WIRE) 命令行! 三个读写子函数速度可能已经不能再快了,定义的磁盘缓冲区也可以读取数据,请问问题还有可能出在哪里啊?


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