求助: ch376建立文件打不开

和这个帖子的情况一样 /bbs/thread-52889-1.html

在pc端能看到文件,但是文件名乱码,也无法打开.

但是操作命令的结果返回都是正常的USB_INT_SUCCESS.

补充 使用的SPI接口, 用FILE_SYS.C或FILE_SYS_C51.C都试过, 现象一样.


补充: 操作U盘后,U盘的指示灯总是闪烁不停.


你的文件名是怎样的?正常的文件名应该为大写英文字母或者数字以及下划线。不能为小写英文字母。包括主文件名以及扩展名,且有固定的长度,满足8+3格式。


文件名"/LOG.TXT", 我在论坛看了好多帖子了,修改了时钟频率,文件路径,操作步骤等等. 折腾2天了还是没解决.

以前的并口模式没问题,这次用SPI模式就这样了.


ch.jpg

这是连续操作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);这个函数,另外,你可以把写的那一部分去了,直接创建看看呢能否在电脑上显示。


CH376SecLocateCH376ByteWrite全部去掉还是不行的.

只是创建/打开,然后关闭,问题一样.


如果前面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版的有大小端区分.


我们的参数都是一个字节一个字节送的,不存在大小端问题。还是你的文件名传递可能有问题。


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