请教关于CH376打开文件的问题

网上买的评估板 根据数据手册

初始化376 然后选择了模式 3 用于读取sd卡

然后执行了 DISK_MOUNT

都没问题 返回 14H 灯也亮了

测试读取厂商信息命令 27H 也给我返回了厂商信息 测试sd卡容量 3E 命令 返回如下 04 00 60 3D (1G的卡 )

然后我提交文件名为 0 或者 /\0 测试打开文件 总是返回1F xWriteCH376Cmd( 0x2f ); //376操作命令 设置文件名 Spi376OutByte(0x0); //0 初始化文件系统 或者 '/\0' 打开根目录 xEndCH376Cmd(); delayms(200);

xWriteCH376Cmd( 0x32 ); //376操作命令 打开文件 //获取中断状态以判断是否成功打开 xEndCH376Cmd( ); delayms(500);

xWriteCH376Cmd(0x22); send_232(Spi376InByte()); //此处得到的是 1F xEndCH376Cmd( );

怎么都得不到14 就是不能正确打开 换另一张SD卡也不行 请指点!!!

补充 : 如果我想打开sd卡上的文件 1.TXT (卡上有且只有1个文件 卡用读卡器格式过(fat)然后新建了1.TXT 里面内容是1234567) 返回还是1FH

...如上 已初始化 设置模式03H 以及 mount命令 返回14 并测试了读取容量和厂商信息 然后执行如下程序

//设置文件名

xWriteCH376Cmd( 0x2f ); //376操作命令 设置文件名 //把文件名送进入

Spi376OutByte('\\');

Spi376OutByte('1'); Spi376OutByte('.'); Spi376OutByte('T'); Spi376OutByte('X'); Spi376OutByte('T'); Spi376OutByte(0x0); //打开文件 xEndCH376Cmd( ); delayms(200);

xWriteCH376Cmd( 0x32 ); //376操作命令 打开文件 delayms(500);

//获取中断状态以判断是否成功打开 xEndCH376Cmd( );

xWriteCH376Cmd(0x22);

send_232(Spi376InByte()); //<<===返回0x1F xEndCH376Cmd( ); while(1);


付完整的main 测试程序 以及输出数据

void main() { unsigned char x; delayms(500); init_232(); //初始化串口 delayms(500);

//测试任务1 获取版本号

P0=0;

CH376_PORT_INIT(); //初始化spi

delayms(1);

//设置376工作方式 xWriteCH376Cmd(0x15); Spi376OutByte(0x03); delayms(1); send_232(Spi376InByte()); // 《《==此处输出51 51=成功 xEndCH376Cmd( );

//设置376的中断工作方式

xWriteCH376Cmd(0x0B); Spi376OutByte(0x16); Spi376OutByte(0x10); xEndCH376Cmd( );

// xWriteCH376Cmd(0x06); //06H 测试命令 检查硬件测试 如成功 输入输入数据取反 AA 输出 55 Spi376OutByte(0xaa); send_232(Spi376InByte()); 《《==此处输出55 xEndCH376Cmd( );

//初始化sd卡

xWriteCH376Cmd(0x31); xEndCH376Cmd( ); delayms(800); //需要足够的延时 300+

xWriteCH376Cmd(0x22); //取中断状态 82=sd卡未连接 14=连接成功 其他等于不成功

x=Spi376InByte();

xEndCH376Cmd( );

send_232(x); 《《==此处返回14

//读取sd卡识别数据 非必需

//xWriteCH376Cmd(0x27); //for (x=0;x<255;x++) //{send_232(Spi376InByte()); } //xEndCH376Cmd( );

//测试磁盘容量 //xWriteCH376Cmd( 0x3e); //xEndCH376Cmd(); //delayms(500);

//xWriteCH376Cmd(0x22); //取中断状态 82=sd卡未连接 14=连接成功 其他等于不成功

//x=Spi376InByte();

//xEndCH376Cmd( );

//send_232(x);

//xWriteCH376Cmd(0x27); //for (x=0;x<255;x++) //{send_232(Spi376InByte()); } //xEndCH376Cmd( );

//04 00 60 3D 《《==测试磁盘返回的数据

//xWriteCH376Cmd( 0x2f ); //376操作命令 设置文件名

//Spi376OutByte(0); //xEndCH376Cmd(); //delayms(200);

//xWriteCH376Cmd( 0x32 ); //376操作命令 打开文件

///获取中断状态以判断是否成功打开 //xEndCH376Cmd( ); //delayms(500);

//xWriteCH376Cmd(0x22);

//send_232(Spi376InByte()); 《《==返回0x1f //xEndCH376Cmd( ); //while(1);

//设置文件名

xWriteCH376Cmd( 0x2f ); //376操作命令 设置文件名 //把文件名送进入

Spi376OutByte('\\');

Spi376OutByte('1'); Spi376OutByte('.'); Spi376OutByte('T'); Spi376OutByte('X'); Spi376OutByte('T'); Spi376OutByte(0x0); //打开文件 xEndCH376Cmd( ); delayms(200);

CH376WriteVar32( 0x64, 0 ); <<==不知道什么意思 例程抄的 有没有都返回0x1F delayms(500); xWriteCH376Cmd( 0x32 ); //376操作命令 打开文件 delayms(500);

//获取中断状态以判断是否成功打开 xEndCH376Cmd( );

xWriteCH376Cmd(0x22);

send_232(Spi376InByte()); // <<==返回0x1f xEndCH376Cmd( ); while(1);

}


例程中有这么长时间的延时吗? 按照例程仔细检查一下程序。另外还有,一定要等中断产生后再获取中断状态。


我没有连接中断脚 用延迟的方式等待中断的产生 用示波器检测也确实产生了中断


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