回  复

查看: 81 | 回复: 3

CH378DiskQuery读取磁盘剩余空间问题
ING 发表于:2017-11-10 16:13:40 1# 编辑

1

主题

2

帖子

22

积分
等级

幼儿园

私信

请教各位大神,使用并口方式,调用例程函数CH378DiskQuery读取磁盘剩余空间时出错,

UINT8 CH378DiskQuery( PUINT32 DiskFre )  

{

UINT8  s;

UINT8  c0, c1, c2, c3;

UINT8 temp[11];


s = CH378SendCmdWaitInt( CMD0H_DISK_QUERY );


if( s == ERR_SUCCESS ) 

{  

xWriteCH378Cmd( CMD00_RD_HOST_REQ_DATA ); /* 写入1个字节命令码 */

temp[0]=xReadCH378Data( );

temp[1]=xReadCH378Data( );/* 读取2个字节数据长度 */

temp[2]=xReadCH378Data( ); /* CH378_CMD_DATA.DiskQuery.mTotalSector */

temp[3]=xReadCH378Data( );

temp[4]=xReadCH378Data( );

temp[5]=xReadCH378Data( );


c0 = xReadCH378Data( );/* CH378_CMD_DATA.DiskQuery.mFreeSector */

c1 = xReadCH378Data( );

c2 = xReadCH378Data( );

c3 = xReadCH378Data( );


*DiskFre = c0 | (UINT16)c1 << 8 | (UINT32)c2 << 16 | (UINT32)c3 << 24;

temp[6]=xReadCH378Data( );/* CH378_CMD_DATA.DiskQuery.mDiskFat */


uart_putchar(temp[0]);

uart_putchar(temp[1]);

uart_putchar(temp[2]);

uart_putchar(temp[3]);

uart_putchar(temp[4]);

uart_putchar(temp[5]);

uart_putchar(c0);

uart_putchar(c1);

uart_putchar(c2);

uart_putchar(c3);

uart_putchar(temp[6]);

uart_putchar('\n');

}

else 

{

*DiskFre = 0;

}

return( s );

}

将返回结果打印出来,

当磁盘为SD卡时,结果为00 a8 3a fa a7 3a 03 03 03 03 03

当磁盘为U盘时, 结果为00 04 ca 60 d4 ed 03 03 03 03 03


另外,在使用SectorSize = 1 <<  CH378ReadVar8( VAR8_DISK_SEC_LEN )读取磁盘扇区大小时,

U盘为512,SD卡为1024,但我用WinHex软件在电脑上读取SD卡扇区大小为512,格式化为512后结果还是不变。由于手上没有SD卡,使用的是TF+SD卡套,这个会不会有影响?


jie 发表于:2017-11-10 16:40:22 2#

1

主题

431

帖子

493

积分
等级

初中二年级

私信

FAT32文件系统在空盘的时候可能会不准,你可以拷进去几百兆文件进去再试试。

jie 发表于:2017-11-10 16:41:08 3#

1

主题

431

帖子

493

积分
等级

初中二年级

私信

有一种慢但是有效的方法,读取FAT表,统计FAT表

ING 发表于:2017-11-10 17:19:15 4#

1

主题

2

帖子

22

积分
等级

幼儿园

私信

SD卡是空的,U盘8G,用了5G。FAN表大概得多长时间啊?

楼层回复

关闭

评分

关闭
积分 评分区间 今日剩余
评分扣除自身相应积分,普通会员最高加分3分 0~10 5
你需要登录才可以发帖