我的SD卡是2G的(实际1.8G左右),调用总容量函数返回值为15184,剩余容量返回值为50346741,这些怎么换算啊,感觉直接*512不对的
使用CH376获取SD容量和剩余容量使用s = CH376DiskQuery( &Size,&Size1);其中Size返回的是剩余容量的扇区数,Size1返回的是总容量的扇区数。容量=扇区数*512/1024/1024(MB)
你这Size,Size1就定义为u32可以不,还是得定义成数组
直接定义Size,Size1为32位unsigned long类型即可。
u8 CH376DiskQuery(u32* DiskFre ) /* */ { u8 s; u8 c0, c1, c2, c3; s = CH376SendCmdWaitInt( CMD0H_DISK_QUERY ); if ( s == USB_INT_SUCCESS ) { /* 参考CH376INC.H文件中CH376_CMD_DATA结构的DiskQuery */ xWriteCH376Cmd( CMD01_RD_USB_DATA0 ); xReadCH376Data( ); /* 长度总是sizeof(CH376_CMD_DATA.DiskQuery) */ xReadCH376Data( ); /* CH376_CMD_DATA.DiskQuery.mTotalSector */ xReadCH376Data( ); xReadCH376Data( ); xReadCH376Data( ); c0 = xReadCH376Data( ); /* CH376_CMD_DATA.DiskQuery.mFreeSector */ c1 = xReadCH376Data( ); c2 = xReadCH376Data( ); c3 = xReadCH376Data( ); *DiskFre = c0 | (u16)c1 << 8 | (u32)c2 << 16 | (u32)c3 << 24; xReadCH376Data( ); /* CH376_CMD_DATA.DiskQuery.mDiskFat */ } else *DiskFre = 0; return( s ); },这是你们提供的函数啊
版主,能把这个函数发过来看看吗 CH376DiskQuery( &Size,&Size1)
函数应该是一样的,只是我的多了读取总扇区的功能。那你看一下c0、c1、c2、c3的值?DiskFre的值?
这个返回值就是c0、c1、c2、c3拼接而成,我其他一些操作都没问题的
你的c0、c1、c2、c3返回值是什么?你是怎么监控DiskFre的值的?是不是你打印的时候数据溢出了。