使用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盘有问题。
我的邮箱个人信息保护,已隐藏
测试软件已发。