使用异步串行通讯方式,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盘初始化已完成,且剩余容量已能正确读出。