CH376S根目录创建新目录成功后,在PC上无法看到该目录

使用异步串行通讯方式,FIFO收发数据。参考技术手册和FILE_SYS.C改写了相关代码。

目前,在单片机中,使用CMD0H_DIR_CREATE命令建立文件返回0x14,再关闭文件,不自动更新。但是,将U盘插到PC上,看不到新建的目录,但U盘的容量已发生变化。U盘的文件系统是FAT32。请问如何解决?

相关代码如下:

  if (new_file_phase == 0)                         // 初始化文件系统

  {

    usb_data_rd_number = 1;                        // 1个回传字节

    USB_CMD_WR(CMD11_READ_VAR8); 

    USIC1_CH0->IN[0] = 0x2B;

    usb_data_wait = 1;                             // 等待回传数据

    new_file_phase++;                              // 进入下一阶段

  }

  else if (new_file_phase == 1)                    // 新建文件夹或者打开已有文件夹

  {

    if (data_receive_usb[0] == 0x10)               // 如果初始化成功

    {

      USB_CMD_WR(CMD10_SET_FILE_NAME);             // 设置文件名指令

      USIC1_CH0->IN[0] = '/';

      USIC1_CH0->IN[0] = 'S';

      USIC1_CH0->IN[0] = 'A';

      USIC1_CH0->IN[0] = 'V';

      USIC1_CH0->IN[0] = 'E';

      USIC1_CH0->IN[0] = '\0';

      new_file_phase++;                                               // 进入下一阶段

      usb_retry_counter = 5;

    }

    else if (usb_retry_counter)

    {

      usb_data_rd_number = 1;                                        // 1个回传字节

      USB_CMD_WR(CMD10_SET_FILE_NAME);               // 设置文件名指令

      USIC1_CH0->IN[0] = '\0';

      USB_CMD_WR(CMD0H_FILE_OPEN);                     // 打开文件

      usb_data_wait = 1;                             // 等待回传数据

      usb_retry_counter--;                           // 尝试次数减1

    }

    else usb_error |= BIT4;                          // 初始化故障

  }

  else if (new_file_phase == 2)

  {

    usb_data_rd_number = 1;                        // 1个回传字节

    USB_CMD_WR(CMD50_WRITE_VAR32);

    USIC1_CH0->IN[0] = 0x64;

    USIC1_CH0->IN[0] = 0x00;

    USIC1_CH0->IN[0] = 0x00;

    USIC1_CH0->IN[0] = 0x00;

    USIC1_CH0->IN[0] = 0x00;

    USB_CMD_WR(CMD0H_DIR_CREATE);

    usb_data_wait = 1;

    new_file_phase++;                              // 进入下一阶段

  }

  else if (new_file_phase == 3)

  {

      USB_CLOSE_FILE(FALSE);                    // 不更新文件长度

      new_file_phase++;                             // 进入下一阶段

  }

  else if (new_file_phase ==4)

  {

    if (data_receive_usb[0] == USB_INT_SUCCESS)

    {

      new_file_phase++;                             // 进入下一阶段

    }

    else usb_error |= BIT7;

  }

运行此段程序前,U盘初始化已完成,且剩余容量已能正确读出。

你好:


你芯片的版本号是多少?


我也遇见同样的问题,我的版本号是0x43.请大神帮助解决问题

这人很懒,什么都没留下

我也遇见同样的问题,我的版本号是0x43.请大神帮助解决问题

这人很懒,什么都没留下

winhex看一下根目录有东西吗

这人很懒,什么都没留下

芯片版本读出来是0x02

U盘实际容量已被占用


已经多次尝试,发现芯片里有BUG。查询剩余容量的指令与读出文件系统状态的指令是冲突的。

一旦在设定文件系统之前,读取了剩余容量,那么U盘的状态就会变成0x10,就是ready状态;

一旦在读取剩余容量之前,读取了文件系统状态,那么U盘的剩余容量数据就会不正确。

这人很懒,什么都没留下

芯片是0X42,打错了

这人很懒,什么都没留下

请问楼上您说的读出文件系统状态指令具体是哪一个指令呢?

这人很懒,什么都没留下

读这个地址的变量  VAR_DISK_STATUS

这人很懒,什么都没留下

025-52632854您可以直接联系我了解一下详细的信息

这人很懒,什么都没留下
只有登录才能回复,可以选择微信账号登录