CH376写文件,长度无法自动更新

我使用STM32+CH376实现U盘文件的读写。目前遇到文件大小总是固定为1的问题。

主代码如下:

uint8_t AppZndbFile2UsbDiskMain(void)

{

    sDateTime dt;

    char filename[15];

    char testnr[18];

    uint16_t rsize;


    if(TRUE == AppZndbFile2UsbInit()) /* 已经初始化 */

    {

        if(TRUE == CheckTimer(eTMR_UsbSpace))

        {

            StartTimer(eTMR_UsbSpace,1000);

            if(FALSE == UsbDiskIn)/* 没有检测到U盘 */

            {

                UsbDiskIn = DrvCh376DiskConnect();/* 检测到U盘已经插入 */

                if(TRUE==UsbDiskIn)

                {

                    if(TRUE == DrvCh376DiskMount())   /* U盘枚举成功 */

                    {

                        dt = AppZndbDataRtcTime();

                        //sprintf(filename,"%02d%02d%02d%02d%02d%02d.JL",dt.Year_U8,dt.Month_U8,dt.Day_U8,dt.Hour_U8,dt.Min_U8,dt.Sec_U8);

                        sprintf(filename,"/%c%c%02d%02d%02d.REC\0",DecTo36Char(dt.Month_U8),DecTo36Char(dt.Day_U8),dt.Hour_U8,dt.Min_U8,dt.Sec_U8);

                        if(TRUE == DrvCh376FileCreate((uint8_t*)filename))/* 文件创建完成 */

                        {

                            sprintf(testnr,"0123456789ABCDEF\r\n");

                            DrvCh376FileWrite((uint8_t *)testnr,16,NULL);

                            DrvCh376FileClose(TRUE);

                            DelayMS(5);

                        }

                    }

                    else

                    {

                        UsbDiskIn = FALSE;

                    }

                }

            }

            else

            {

                if(FALSE == DrvCh376DiskConnect()) UsbDiskIn = FALSE;

            }

        }

    }

    return UsbDiskIn;

}


上面函数DrvCh376****均直接采用示例里面的FILE_SYS.C的原型,未做任何更改。


执行完成后,U盘可以看到文件名,文件大小为1字节,利用Winhex直接查看U盘。可以看到写入的16个字节。

说明文件内容已经写入,但文件的大小并未更新。


后右增加了设置文件大小指令,将FileClose的参数改为FALSE。文件大小仍然为1字节。


这个情况该如何解决?

看到论坛有采用openfile再close的方法。

修部分内容:

                            DrvCh376FileClose(TRUE);/*FileCreate的关闭*/

                            DelayMS(5);

                            DrvCh376FileOpen((uint8_t *)filename);/*重新OpenFile*/

                            DrvCH376SetFileInfo(dt,filesize);/* 更新文件日期及大小 */

                            DelayMS(5);

                            DrvCh376FileClose(FALSE);


这样现在文件的大小和时间就是正确的了。



字节写之后使用CH376FileClose( 1 )可以更新文件大小。此外, xWriteCH376Cmd( CMD2H_BYTE_WRITE );
 xWriteCH376Data(0);xWriteCH376Data( 0);
 即写0长度同样可以更新,可以一试。
 


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