This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C123FH6PM:TIRTOS -使用 ff.h 而不是 stdio.h 以及 USBMSCHFatFs

Guru**** 1812430 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/994492/tm4c123fh6pm-tirtos---using-ff-h-instead-of-stdio-h-with-usbmschfatfs

器件型号:TM4C123FH6PM

大家好、

我有一个非 tirtos 项目、它使用 fatfs 函数、如 find_first 等、在大容量存储设备上查找文件。

现在、我将代码移植到 TIRTOS、在设置将读取 USB 的任务时遇到一些问题。  

我可以连接到 USB、但是在示例工程上使用的 stdio.h 上的操作不足以提供所需的功能。

有没有一个直接使用 ff.h 文件的示例项目可从中学习。

谢谢、

金枪鱼  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     在 CCS Resource Explorer 中、您可以下载使用 ff.h 文件的 FatSD Raw 示例。 您可以参考此示例、了解它如何使用 f_open、fwrite 等 请参阅下面的内容。  

    e2e.ti.com/.../fatsdraw.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、  

    感谢您的快速回复。  

    我尝试在代码上复制该示例。 当 fopen 尝试调用 get_FATTIME()时,我将获得系统中止;

    我在.cfg 文件上启用了 fatfs 模块、就像示例一样。  

    您对我可能遗漏的内容有什么想法吗?  

    这是我的 USB 初始化函数。  

    USBMSCHFatFs_Handle Updater_flashDriveInit(void)
    {
      static USBMSCHFatFs_Handle usbmschfatfsHandle;
      static USBMSCHFatFs_Params usbmschfatfsParams;
      static uint8_t usbServiceTaskStack[1024];
    
      /* Mount and register the USB Drive */
      USBMSCHFatFs_Params_init(&usbmschfatfsParams);
      usbmschfatfsParams.serviceTaskStackPtr = usbServiceTaskStack;
      usbmschfatfsParams.serviceTaskStackSize = sizeof(usbServiceTaskStack);
      usbmschfatfsHandle = USBMSCHFatFs_open(UPDATE_FLASH_DRIVE,
                                             USB_DRIVE_NUM,
                                            &usbmschfatfsParams);
    
      if (usbmschfatfsHandle == NULL) {
          System_abort("Error starting the USB Drive\n");
      }
      else {
          System_printf("Drive %u is mounted\n", USB_DRIVE_NUM);
      }
    
      return usbmschfatfsHandle;
    }

    然后调用 Wait for connect、并在找到驱动器时调用 fopen。  

    这是我的任务:

    void Updater_usbTask(UArg arg0, UArg arg1)
    {
      static FRESULT res;
      static FIL fil;
      USBMSCHFatFs_Handle Updater_flashDrive = Updater_flashDriveInit();
      while(1)
      {
        if(USBMSCHFatFs_waitForConnect(Updater_flashDrive, BIOS_NO_WAIT))
        {
          res = f_open(&fil, "0:input.txt", FA_CREATE_NEW|FA_READ|FA_WRITE);
          System_printf("Found");
          if(res != FR_OK)
          {
            System_printf("Error");
          }
          while(1);
        }
        else
        {
          System_printf("Not Found");
        }
        Task_yield();
      }
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     您是否调用 了 USBMSCHFatFs_init?  

     我个人在 TI-RTOS 环境中没有 USB FatFS 应用程序的相关经验。 您是否获得了 USB_host_msc 裸机示例、以便在没有 RTOS 的情况下工作?

     以下是一些帖子、虽然这些帖子并未完成、但我希望它们提供一些指导。  

      https://e2e.ti.com/support/microcontrollers/other/f/other-microcontrollers-forum/618316/rtos-tm4c1294ncpdt-recovering-after-usbmschfatfs_waitforconnect/2305094?tisearch=e2e-sitesearch&keymatch=USBMSCHFatFs_init#2305094

    https://e2e.ti.com/support/archive/stellaris_arm/f/stellaris-arm-lm3s-microcontrollers-read-only-archived-forum/206153/sdk-usbmsc/732335?tisearch=e2e-sitesearch&keymatch=USBMSCHFatFs_Config#732335

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    执行清理和另一个构建可解决获取日期问题。 然后出现无效名称错误。

    我使用 tm4c1294xl 板运行了一些示例、并意识到所有文件名都是小写的、即使创建的文件是驱动器上的大写。 此外、名称长度似乎为8个字符。 修复这些问题后、我可以正确使用。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    继续发展、现在我又遇到了问题。 使用 f_open 创建文件时、调用 get_fattime、调用 ti_mw_fatfs_getFatTime 会再次中止。 我不知道发生了什么变化。 当我从示例切换到开发代码时、可能没有创建文件。 其他人在创建文件之前是否遇到了中止问题? 谢谢你。