CH374DiskSize已经可以正确读出容量大小,但调用CH374FileOpen会卡死,不知道什么原因,LIB的版本号是0X19。MCU用的是STM32F103VE6。
int main()
{
u32 isize = 0;
u8 i;
uart_init(115200);
//printf("start\n");
delay_init();
LED_Init( LED0 | LED1 | LED2 | LED3 );
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
CH374_Init();
i = CH374LibInit( ); /* 初始化CH375程序库和CH375芯片,操作成功返回0 */
mStopIfError( i );
while(1)
{
//printf( "Wait Udisk\n" );
while ( CH374DiskStatus < DISK_CONNECT ) { /* 查询CH375中断并更新中断状态,等待U盘插入 */
if ( CH374DiskConnect( ) == ERR_SUCCESS ) break; /* 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus */
delay_ms( 100 );
}
delay_ms(200);
//printf("Disk Init\n");
for ( i = 0; i < 5; i ++ ) { /* 有的U盘总是返回未准备好,不过可以被忽略 */
delay_ms( 100 );
printf( "Ready ?\n" );
if ( CH374DiskReady( ) == ERR_SUCCESS ) break; /* 查询磁盘是否准备好 */
}
/* 查询磁盘物理容量 */
//printf( "DiskSize\n" );
i = CH374DiskSize( );
mStopIfError( i );
isize = mCmdParam.DiskSize.mDiskSizeSec * (CH374vSectorSize/512) / 2048;
printf( "size = %d\n" ,isize);
//printf( "TotalSize = %u MB \n", (unsigned int)( mCmdParam.DiskSize.mDiskSizeSec * (CH374vSectorSize/512) / 2048 ) ); // 显示为以MB为单位的容量
// 原计算方法 (unsigned int)( mCmdParam.DiskSize.mDiskSizeSec * CH374vSectorSize / 1000000 ) 有可能前两个数据相乘后导致溢出, 所以修改成上式
mCmdParam.Open.mPathName[0] = '/';
mCmdParam.Open.mPathName[1] = '1';
mCmdParam.Open.mPathName[2] = '.';
mCmdParam.Open.mPathName[3] = 'C';
mCmdParam.Open.mPathName[4] = 0;
i = CH374FileOpen();
mStopIfError( i );
CH374FileReadX();
printf( "size = %d\n" ,mCmdParam.ByteRead.mByteCount);
/* 产生新文件 */
//printf( "Create\n" ); //串口创建时间会超长
mCmdParam.Create.mPathName[0] = '/';
mCmdParam.Create.mPathName[1] = '1';
mCmdParam.Create.mPathName[2] = '.';
mCmdParam.Create.mPathName[3] = 'C';
mCmdParam.Create.mPathName[4] = 0;
i = CH374FileCreate( ); /* 新建文件并打开,如果文件已经存在则先删除后再新建 */
mStopIfError( i );
printf( "Write some data to file 1.C \n" );
mCmdParam.ByteWrite.mByteBuffer[0] = 'a';
mCmdParam.ByteWrite.mByteBuffer[1] = 'b';
mCmdParam.ByteWrite.mByteBuffer[2] = 'c';
mCmdParam.ByteWrite.mByteBuffer[3] = 'd';
mCmdParam.ByteWrite.mByteBuffer[4] = 'e';
mCmdParam.ByteWrite.mByteCount = 5; /* 指定本次写入的字节数,单次读写的长度不能超过MAX_BYTE_IO */
i = CH374ByteWrite( ); /* 以字节为单位向文件写入数据,单次读写的长度不能超过MAX_BYTE_IO */
mStopIfError( i );
//printf( "Close\n" );
mCmdParam.Close.mUpdateLen = 1; /* 不要自动计算文件长度,如果自动计算,那么该长度总是CH374vSectorSize的倍数 */
i = CH374FileClose( );
mStopIfError( i );
//printf( "Take out\n" );
while ( 1 ) {
delay_ms( 10 ); /* 没必要频繁查询 */
if ( CH374DiskConnect( ) != ERR_SUCCESS ) break; /* 查询方式: 检查磁盘是否连接并更新磁盘状态,返回成功说明连接 */
}
delay_ms( 200 );
}