關(guān)于CH378U盤剩余容量的問題

我在調(diào)用例程中的查詢U盤剩余容量時

/* 檢查U盤或者SD卡的剩余空間 */

printf( "DiskQuery: " );

status = CH378DiskQuery( (PUINT32)buf ); ??/* 查詢磁盤剩余空間信息,扇區(qū)數(shù) */

printf( "Free Cap: = %ld MB\n", *(PUINT32)buf / ( 1000000 / DEF_SECTOR_SIZE ) ); ?/* 未用扇區(qū)數(shù)乘以扇區(qū)大小后,除以1M換算為兆字節(jié)單位 */

其中CH378DiskQuery函數(shù)的內(nèi)容和你們提供的應(yīng)該是一致的

UINT8 CH378DiskQuery( PUINT32 DiskFre ) ?

{

UINT8 ?s;

//UINT8 ?c0, c1, c2, c3;


s = CH378SendCmdWaitInt( CMD0H_DISK_QUERY );

if( s == ERR_SUCCESS )?

{ ?

xWriteCH378Cmd( CMD00_RD_HOST_REQ_DATA );?/* 寫入1個字節(jié)命令碼 */

xReadCH378Data( );

xReadCH378Data( );???? ? /* 讀取2個字節(jié)數(shù)據(jù)長度 */

xReadCH378Data( ); ??/* CH378_CMD_DATA.DiskQuery.mTotalSector */

xReadCH378Data( );

xReadCH378Data( );

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;

xReadCH378Data( ); ??/* CH378_CMD_DATA.DiskQuery.mDiskFat */

xEndCH378Cmd( );

}

else?

{

*DiskFre = 0;

}

return( s );

}

其中我在往U盤中寫入信息時*DiskFre的值總是不變是不是xReadCH378Data( );有問題呢?我的函數(shù)內(nèi)容是

UINT8 xReadCH378Data( void )

{

return( Spi376Exchange( 0xFF ) );

}


這部分代碼沒什么問題。你可以把盤剩余空間變化大一點,畢竟你的Free Cap是經(jīng)過除數(shù)運算的。


我把那個磁盤剩余空間從14G變化到9.5G那個讀出c0 | (UINT16)c1 << 8 | (UINT32)c2 << 16 | (UINT32)c3 << 24;還是一個固定的值。


執(zhí)行CMD00_RD_HOST_REQ_DATA之后,把后面執(zhí)行的11個xReadCH378Data值都打印出來,其中前兩個是后續(xù)長度,接著4個是磁盤大小,接著4個是剩余扇區(qū),接著1個是文件系統(tǒng)類型??雌渌麛?shù)據(jù)都是否正確?


那個后來我又重新試了一下,應(yīng)該是沒有問題了,但是那個我通過沁恒例程里面的計算的總?cè)萘渴?5.06G但是我在電腦上面看到的總?cè)萘渴?4.3G這個正常嗎?


大家的計算方法可以略有不同,首先計算扇區(qū)有的計算總扇區(qū),有的只計算數(shù)據(jù)區(qū),換算方式上,有的除以1000,有的除以1024。都是有區(qū)別的,大致相同讀出的算是正常值。


嗯,那個我如果想要獲取文件的時間信息的話是根據(jù)EXAM10的例程來改動嗎?status = CH378DirInfoRead( 0xFF ); ? /* 讀取當(dāng)前文件的目錄信息FAT_DIR_INFO,將相關(guān)數(shù)據(jù)調(diào)到內(nèi)存中 */這個函數(shù)說是會將關(guān)數(shù)據(jù)調(diào)到內(nèi)存中我不是特別清楚那個調(diào)入內(nèi)存中的意思,是緩存到下面這個函數(shù)中的buf中去了嗎?

CH378ReadReqBlock( buf );

pDir = (P_FAT_DIR_INFO)buf; ? /* 當(dāng)前文件目錄信息 */



那個后來我試了一下讀取文件的屬性,那個我讀出DIR_CrtTimeTenth;/* 0DH,文件創(chuàng)建的時間,以0.1秒單位計數(shù) */得到的值為25

DIR_CrtTime;/* 0EH,文件創(chuàng)建的時間 */

得到的值為34596

DIR_CrtDate;/* 10H,文件創(chuàng)建的日期 */

得到的值為18734

請問我需要怎么轉(zhuǎn)換成常用的時間單位呢?


/* Time = (Hour<<11) + (Minute<<5) + (Second>>1) */
#define MAKE_FILE_TIME( h, m, s )?( (h<<11) + (m<<5) + (s>>1) )?/* 生成指定時分秒的文件時間數(shù)據(jù) */
/* 文件日期 UINT16 */
/* Date = ((Year-1980)<<9) + (Month<<5) + Day */
#define MAKE_FILE_DATE( y, m, d )?( ((y-1980)<<9) + (m<<5) + d )?/* 生成指定年月日的文件日期數(shù)據(jù) */


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频