使用異步串行通訊方式,F(xiàn)IFO收發(fā)數(shù)據(jù)。參考技術(shù)手冊(cè)和FILE_SYS.C改寫(xiě)了相關(guān)代碼。
目前,在單片機(jī)中,使用CMD0H_DIR_CREATE命令建立文件返回0x14,再關(guān)閉文件,不自動(dòng)更新。但是,將U盤(pán)插到PC上,看不到新建的目錄,但U盤(pán)的容量已發(fā)生變化。U盤(pán)的文件系統(tǒng)是FAT32。請(qǐng)問(wèn)如何解決?
相關(guān)代碼如下:
? if (new_file_phase == 0)? ? ? ? ? ? ? ? ? ? ? ? ?// 初始化文件系統(tǒng)
? {
? ? usb_data_rd_number = 1;? ? ? ? ? ? ? ? ? ? ? ? // 1個(gè)回傳字節(jié)
? ? USB_CMD_WR(CMD11_READ_VAR8);?
? ? USIC1_CH0->IN[0] = 0x2B;
? ? usb_data_wait = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 等待回傳數(shù)據(jù)
? ? new_file_phase++;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 進(jìn)入下一階段
? }
? else if (new_file_phase == 1)? ? ? ? ? ? ? ? ? ? // 新建文件夾或者打開(kāi)已有文件夾
? {
? ? if (data_receive_usb[0] == 0x10)? ? ? ? ? ? ? ?// 如果初始化成功
? ? {
? ? ? USB_CMD_WR(CMD10_SET_FILE_NAME);? ? ? ? ? ? ?// 設(shè)置文件名指令
? ? ? 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++;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 進(jìn)入下一階段
? ? ? usb_retry_counter = 5;
? ? }
? ? else if (usb_retry_counter)
? ? {
? ? ? usb_data_rd_number = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 1個(gè)回傳字節(jié)
? ? ? USB_CMD_WR(CMD10_SET_FILE_NAME);? ? ? ? ? ? ? ?// 設(shè)置文件名指令
? ? ? USIC1_CH0->IN[0] = '\0';
? ? ? USB_CMD_WR(CMD0H_FILE_OPEN);? ? ? ? ? ? ? ? ? ? ?// 打開(kāi)文件
? ? ? usb_data_wait = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 等待回傳數(shù)據(jù)
? ? ? usb_retry_counter--;? ? ? ? ? ? ? ? ? ? ? ? ? ?// 嘗試次數(shù)減1
? ? }
? ? else usb_error |= BIT4;? ? ? ? ? ? ? ? ? ? ? ? ? // 初始化故障
? }
? else if (new_file_phase == 2)
? {
? ? usb_data_rd_number = 1;? ? ? ? ? ? ? ? ? ? ? ? // 1個(gè)回傳字節(jié)
? ? 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++;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 進(jìn)入下一階段
? }
? else if (new_file_phase == 3)
? {
? ? ? USB_CLOSE_FILE(FALSE);? ? ? ? ? ? ? ? ? ? // 不更新文件長(zhǎng)度
? ? ? new_file_phase++;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 進(jìn)入下一階段
? }
? else if (new_file_phase ==4)
? {
? ? if (data_receive_usb[0] == USB_INT_SUCCESS)
? ? {
? ? ? new_file_phase++;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 進(jìn)入下一階段
? ? }
? ? else usb_error |= BIT7;
? }
運(yùn)行此段程序前,U盤(pán)初始化已完成,且剩余容量已能正確讀出。