补充 使用的SPI接口, 用FILE_SYS.C或FILE_SYS_C51.C都试过, 现象一样.
补充: 操作U盘后,U盘的指示灯总是闪烁不停.
你的文件名是怎样的?正常的文件名应该为大写英文字母或者数字以及下划线。不能为小写英文字母。包括主文件名以及扩展名,且有固定的长度,满足8+3格式。
文件名"/LOG.TXT", 我在论坛看了好多帖子了,修改了时钟频率,文件路径,操作步骤等等. 折腾2天了还是没解决.
以前的并口模式没问题,这次用SPI模式就这样了.
这是连续操作3次后的文件.
一般这种问题都是文件名的问题,与接口无关。接口只需要测试命令能过,后面操作是一样的。你把你创建文件那段程序贴出来看一下。
流程:
mInitCH376Host()
CH376DiskConnect()
DelaymS(500);
CH376DiskMount()
以上结果都是 USB_INT_SUCCESS.
读出U盘信息 P_INQUIRY_DATA 也正常.
以下操作都返回正常,但是操作完成后U盘灯一直闪,在pc端也不能打开文件,文件名显示乱码.
err=CH376FileOpen("/LOG.TXT");// CH376FileCreate
if(USB_INT_SUCCESS==err)
{
#if DEBUG_ENABLE
printf("ch376_file_open_ok! ");
printf("fils_size: %ld\r\n", CH376GetFileSize());
#endif
err=CH376ByteLocate(0xFFFFFFFF);//移到文件尾部
if(USB_INT_SUCCESS==err)
{
#if DEBUG_ENABLE
printf("ch376_locate_file_ok!\r\n");
#endif
}
else
{
#if DEBUG_ENABLE
printf("ch376_locate_file_error!\r\n");
#endif
return err;
}
}
else if(ERR_MISS_FILE==err)
{
err=CH376FileCreate("/LOG.TXT");//新建文件并打开
if(USB_INT_SUCCESS==err)
{
#if DEBUG_ENABLE
printf("ch376_create_file_ok!\r\n");
#endif
}
else
{
#if DEBUG_ENABLE
printf("ch376_create_file_error!\r\n");
#endif
return err;
}
}
else
{
#if DEBUG_ENABLE
printf("ch376_open_file_error!\r\n");
#endif
return err;//打开文件出错
}
CH376SecLocate(0);
err=CH376ByteWrite("0123456789abcdef", 16, (u16*)&h);//以字节为单位向文件写入数据
if(USB_INT_SUCCESS==err)
{
#if DEBUG_ENABLE
printf("ch376_write_%d_bytes!\r\n",h);
#endif
}
else
{
#if DEBUG_ENABLE
printf("ch376_write_error!\r\n");
#endif
return err;
}
err=CH376ByteWrite("123", 0, NULL);//0字节写入,以更新文件长度 */
err=CH376FileClose(TRUE);//文件关闭,以更新文件长度
if(USB_INT_SUCCESS==err)
{
#if DEBUG_ENABLE
printf("ch376_file_close_ok!\r\n");
#endif
}
else
{
#if DEBUG_ENABLE
printf("ch376_file_close_error!\r\n");
#endif
return err;
}
感谢ZBin, 还以为帖子沉了呢. 都准备改硬件了.
你在写之前不用调用CH376SecLocate(0);这个函数,另外,你可以把写的那一部分去了,直接创建看看呢能否在电脑上显示。
把CH376SecLocate到CH376ByteWrite全部去掉还是不行的.
只是创建/打开,然后关闭,问题一样.
如果前面diskmount正确通过,创建文件不成功。可能跟你U盘有关系,U盘格式化或者换一个U盘试一下。
ch376_disk_connect_ok!
ch376_disk_mount_ok!
协议版本: 2
UdiskInfo: Generic Flash-Disk 1.09
ch376_create_file_ok!
ch376_write_16_bytes!
ch376_file_close_ok!
这是我操作后返回的结果. 换了一个ch376芯片, 我把建立文件的名称改为123.TXT, 现在在电脑上看到的文件名变成了Xt?Z2,d.Y[ 感觉是传输的数据出错了.
换了U盘, 结果如下,但是文件还是不对. 唉, 崩溃了!
ch376_init_ok!
ch376_disk_connect_ok!
ch376_disk_mount_ok!
协议版本: 4
UdiskInfo: KingstonDataTraveler 2.08.07
ch376_file_open_ok! fils_size: 16
ch376_locate_file_ok!
ch376_write_16_bytes!
ch376_file_close_ok!
请问是因为大小端的问题吗? 我看c51版的有大小端区分.
我们的参数都是一个字节一个字节送的,不存在大小端问题。还是你的文件名传递可能有问题。