376使用,打开不存在的文件返回0x13

使用dspic30f6014a通过串口与376通讯,能够判断u盘连接,和初始化,但打开一个不存在的文件时 返回0x14

程序如下


voidxWriteCH376Cmd( UINT8 mCmd )  /* 向CH376写命令 */

{

WriteUART2(SER_SYNC_CODE1);

sleepm(0);

WriteUART2(SER_SYNC_CODE2);

sleepm(0);

WriteUART2(mCmd);

sleepm(0);

}


voidxWriteCH376Data( UINT8 data )  /* 向CH376写数据 */

{

while(!U2STAbits.TRMT);

    if(U2MODEbits.PDSEL == 3)

        U2TXREG = data;

    else

        U2TXREG = data & 0xFF;

    while(!U2STAbits.TRMT);     

}


UINT8xReadCH376Data( void )  /* 从CH376读数据 */

{

while(!U2STAbits.URXDA);

    if(U2MODEbits.PDSEL == 3)

        return (U2RXREG);

    else

        return (U2RXREG & 0xFF);

}


/* 查询CH376中断(INT#低电平) */

UINT8Query376Interrupt( void )

{

//#ifdefCH376_INT_WIRE

//return( CH376_INT_WIRE ? FALSE : TRUE );  /* 如果连接了CH376的中断引脚则直接查询中断引脚 */

//#else

if ( PORTFbits.RF7 !=1 ) {  /* 如果未连接CH376的中断引脚则查询串口中断状态码 */

//RI = 0;

return( TRUE );

}

else return( FALSE );

//#endif

}


UINT8mInitCH376Host( void )  /* 初始化CH376 */

{

UINT8res;

sleepm(50);

//CH376_PORT_INIT( );  /* 接口硬件初始化 */

InitUART2();

xWriteCH376Cmd(CMD00_RESET_ALL);

sleepm(400);

xWriteCH376Cmd( CMD11_CHECK_EXIST );  /* 测试单片机与CH376之间的通讯接口 */

xWriteCH376Data( 0x65 );

res = xReadCH376Data( );

if ( res != 0x9A ) return( ERR_USB_UNKNOWN );  /* 通讯接口不正常,可能原因有:接口连接异常,其它设备影响(片选不唯一),串口波特率,一直在复位,晶振不工作 */


xWriteCH376Cmd( CMD21_SET_BAUDRATE );  /* 设置串口通讯波特率 */


xWriteCH376Data( 0x02 );

xWriteCH376Data( 0xb2 );

res = xReadCH376Data( );

if ( res != CMD_RET_SUCCESS ) return( ERR_USB_UNKNOWN );  /* 通讯波特率切换失败,建议通过硬件复位CH376后重试 */

      xWriteCH376Cmd( CMD11_SET_USB_MODE );  /* 设备USB工作模式 */

xWriteCH376Data( 0x06 );

sleepm(0);

res = xReadCH376Data( );

if ( res == CMD_RET_SUCCESS ) return( USB_INT_SUCCESS );

else return( ERR_USB_UNKNOWN );  /* 设置模式错误 */

}



UINT8Wait376Interrupt( void )  /* 等待CH376中断(INT#低电平),返回中断状态码, 超时则返回ERR_USB_UNKNOWN */

{

UINT8  i;

//#ifdefDEF_INT_TIMEOUT

//#ifDEF_INT_TIMEOUT < 1

//while ( Query376Interrupt( ) == FALSE );  /* 一直等中断 */

while( PORTFbits.RF7==1);

return( CH376GetIntStatus( ) );  /* 检测到中断 */

      i=0;

}


//////////////////////////////////////////////////////////////////////////////////

 mInitCH376Host(  );

  

  while(s != USB_INT_SUCCESS ) {  /* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */

U2STAbits.OERR=0;//清接收缓存

s= CH376DiskConnect( );

k=s;

sleepm( 100 );

}

sleepm( 200 );  /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */


/* 对于检测到USB设备的,最多等待10*50mS */

for ( s = 0; s < 10; s ++ ) {  /* 最长等待时间,10*50mS */

sleepm( 50 );

//printf( "Ready ?\n" );

U2STAbits.OERR=0;

s=CH376DiskMount( );

if (  s== USB_INT_SUCCESS ) break;  /* 初始化磁盘并测试磁盘是否就绪 */

            

}

sleepm( 200 );  /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */

U2STAbits.OERR=0;

s = CH376FileOpen("/MYADC.TXT\0");  /* 打开文件,该文件不存在 */

if ( s == USB_INT_SUCCESS ) {  /* s   =  0x14 */

//printf( "File size = %ld\n", CH376GetFileSize( ) );  /* 读取当前文件长度 */

//printf( "Locate tail\n" );

s = CH376ByteLocate( 0xFFFFFFFF );  /* 移到文件的尾部 */

//mStopIfError( s );

}

else if ( s == ERR_MISS_FILE ) {  /* 没有找到文件,必须新建文件 */

//printf( "Create\n" );

s = CH376FileCreate( NULL );  /* 新建文件并打开,如果文件已经存在则先删除后再新建,不必再提供文件名,刚才已经提供给CH376FileOpen */

//mStopIfError( s );

}



你有没有换个U盘或者将次U盘格式化一下试试。


换过u盘,也格式化试了,还一样,听说有376的调试工具呀,给我发一个,我想试试是376或u盘有问题。

我的邮箱个人信息保护,已隐藏


测试软件已发。


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