<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      《ESP32-S3使用指南—IDF版 V1.6》第四十五章 Flash模擬U盤實驗

      第四十五章 Flash模擬U盤實驗

      1)實驗平臺:正點原子DNESP32S3開發板

      2)章節摘自【正點原子】ESP32-S3使用指南—IDF版 V1.6

      3)購買鏈接:https://detail.tmall.com/item.htm?&id=768499342659

      4)全套實驗源碼+手冊+視頻下載地址:http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html

      5)正點原子官方B站:https://space.bilibili.com/394620890

      6)正點原子DNESP32S3開發板技術交流群:132780729

      155537c2odj87vz1z9vj6l

      155537nfqovl2gg9faaol9

      本章我們介紹ESP32S3的USB HOST應用,即通過USB HOST功能,將某個分區表實現模擬U盤/讀卡器等大容量USB存儲設備。
      本章分為如下幾個小節:
      45.1 Flash模擬U盤簡介
      45.2 硬件設計
      45.3 程序設計
      45.4 下載驗證

      45.1 Flash模擬U盤簡介
      所謂Flash模擬U盤,就類似于我們平常使用的U盤,我們只不過是將單片機與電腦通過USB數據線進行連接,從而進行數據傳輸。電腦能夠識別出單片機通過外部Flash模擬出的U盤,在電腦上能夠對該U盤進行文件的相互拷貝,并且重新上電后數據不丟失。通過對USB的了解,USB分設備(Device)模式和主機(Host)模式,使用單片機模擬U盤是讓USB工作在設備(Device)模式下。
      我們可以利用ESP32自帶的USB功能,來實現一個Flash模擬U盤,從而通過USB,實現電腦與ESP32的數據互傳。上位機無需編寫專門的USB程序,只需要一個串口調試助手即可調試,非常實用。

      45.2 硬件設計
      45.2.1例程功能
      本實驗利用ESP32自帶的USB功能,通過USB連接電腦后,子分區會在電腦上進行加載,并顯示該子分區的容量,我們可測試子分區數據的讀寫了。
      LED閃爍,提示程序運行,USB和電腦連接成功。

      45.2.2硬件資源
      1.LED燈
      LED -IO0

      2.獨立按鍵
      KEY0(XL9555) - IO1_7
      KEY1(XL9555) - IO1_6
      KEY2(XL9555) - IO1_5
      KEY3(XL9555) - IO1_4

      3.XL9555
      IIC_SDA-IO41
      IIC_SCL-IO42

      4.SPILCD
      CS-IO21
      SCK-IO12
      SDA-IO11
      DC-IO40(在P5端口,使用跳線帽將IO_SET和LCD_DC相連)
      PWR- IO1_3(XL9555)
      RST- IO1_2(XL9555)

      5.UART_NUM_0(U0TX、U0RX連接至板載USB轉串口芯片上)
      U0TXD-IO43
      U0RXD-IO45

      6.USB

      45.2.3原理圖
      本章實驗使用USB接口與PC進行連接,開發板板載了一個USB接口,用于連接其他USB設備,USB接口與MCU的連接原理圖,如下圖所示:

      image001

      圖45.2.3.1 USB接口與MCU的連接原理圖

      45.3 程序設計
      45.3.1 程序流程圖
      程序流程圖能幫助我們更好的理解一個工程的功能和實現的過程,對學習和設計工程有很好的主導作用。下面看看本實驗的程序流程圖:

      image004

      圖45.3.1.1Flash模擬U盤實驗程序流程圖

      45.3.2 Flash模擬U盤函數解析
      ESP-IDF提供了一套API來配置Flash。要使用此功能,需要導入必要的頭文件:

      #include"ff.h"
      #include"diskio.h"
      #include"esp_vfs_fat.h"
      #include"tinyusb.h"
      

      接下來,作者將介紹一些常用的ESP32-S3中的Flash函數,這些函數的描述及其作用如下:
      1,掛載分區函數
      該函數用給定的配置,來掛載分區,該函數原型如下所示:

      esp_err_tesp_vfs_fat_spiflash_mount_rw_wl(const char*base_path,
                                                 const char*partition_label,
                                                 constesp_vfs_fat_mount_config_t* mount_config,
                                                wl_handle_t* wl_handle);
      

      該函數的形參描述如下表所示:

      QQ截圖20251031160758

      表45.3.2.1esp_vfs_fat_spiflash_mount_rw_wl ()函數形參描述
      該函數的返回值描述,如下表所示:

      QQ截圖20251031160812

      表45.3.2.2函數esp_vfs_fat_spiflash_mount_rw_wl()返回值描述
      該函數使用esp_vfs_fat_mount_config_t類型的結構體變量傳入,該結構體的定義如下所示:

      QQ截圖20251031160824

      表45.3.2.3esp_vfs_fat_mount_config_t結構體參數值描述
      完成上述結構體參數配置之后,可以將結構傳遞給 esp_vfs_fat_spiflash_mount_rw_wl () 函數,用以掛載分區。
      更多有關USB函數的介紹,請讀者們回顧上一章節的內容。

      45.3.3 Flash模擬U盤驅動解析
      在IDF版的34_usb_flash_u例程中,作者在34_usb_flash_u\components路徑下新增了Flash驅動文件。
      這里我們只講解核心代碼,詳細的源碼請大家參考光盤本實驗對應源碼。
      本實驗,我們將相TinyUSB庫文件拷貝到components文件夾下,在APP文件夾下的文件則是我們基于TinyUSB自行編寫的代碼。最終得到如圖45.3.3.1所示的工程:

      image005

      圖45.3.3.1 Flash模擬U盤工程分組
      上圖中位于components文件夾下的是我們自己編寫的一些外設驅動,main文件夾下包含了一個APP文件與一個后綴為.yml的文件。APP文件夾下包含的是FLASH模擬U盤(USB)代碼,而后綴為.yml的文件其主要作用是將項目中各組件的依賴項定義在單獨的清單文件中,并以上圖所示的方式進行命名。在我們的例程中提現出的作用就是簡化了整個工程結構。我們在編譯的過程中,系統便會幫我們自動生成USB外設所需要的依賴庫:espressif_esp_tinyusb以及espressif_tinyusb。做到了即能簡化項目工程,又能有效規避了在編譯中遇到的錯誤,但前提是運行時得確保個人的電腦處于聯網狀態。

      45.3.4 CMakeLists.txt文件
      打開本實驗BSP下的CMakeLists.txt文件,其內容如下所示:

      set(src_dirs
                  IIC
                  LCD
                  LED
                  SPI
                  XL9555)
      
      set(include_dirs
                  IIC
                  LCD
                  LED
                  SPI
                  XL9555)
      
      set(requires
                  driver)
      
      idf_component_register(SRC_DIRS${src_dirs}
      INCLUDE_DIRS ${include_dirs}REQUIRES ${requires})
      
      component_compile_options(-ffast-math -O3 -Wno-error=format=-Wno-format)
      

      該路徑下的CmakeList文件并沒有新增內容,主要變化在于main文件。
      打開本實驗main文件下的CMakeLists.txt文件,其內容如下所示:

      idf_component_register(
          SRC_DIRS
              "."
              "app"
          INCLUDE_DIRS
              "."
              "app")
      

      上述的紅色app驅動需要由開發者自行添加,以確保USB驅動能夠順利集成到構建系統中。這一步驟是必不可少的,它確保了USB驅動的正確性和可用性,為后續的開發工作提供了堅實的基礎。
      45.3.5 實驗應用代碼
      打開main/main.c文件,該文件定義了工程入口函數,名為app_main。該函數代碼如下。

      i2c_obj_ti2c0_master;
      
      /**
      * @brief      程序入口
      * @param      無
      * @retval     無
      */
      voidapp_main(void)
      {
          esp_err_t ret;
      
          ret =nvs_flash_init();                             /* 初始化NVS */
         
      if (ret ==ESP_ERR_NVS_NO_FREE_PAGES ||
              ret ==ESP_ERR_NVS_NEW_VERSION_FOUND)
          {
              ESP_ERROR_CHECK(nvs_flash_erase());
              ret =nvs_flash_init();
          }
      
          ESP_ERROR_CHECK(ret);
      
          led_init();                                           /* 初始化LED */
          i2c0_master =iic_init(I2C_NUM_0);                    /* 初始化IIC0 */
          spi2_init();                                          /* 初始化SPI */
          xl9555_init(i2c0_master);                               /* 初始化IO擴展芯片 */
          lcd_init();                                           /* 初始化LCD */
         
          /* 顯示實驗信息 */
          lcd_show_string(30, 50, 200, 16, 16, "ESP32-S3", RED);
          lcd_show_string(30, 70, 200, 16, 16, "USBFLASH TEST", RED);
          lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
          lcd_show_string(30, 110, 200, 16, 16, "status:", RED);
          tud_usb_flash();                                     /* USB初始化 */
      
          while(1)
          {
              if ((g_usbdev.status& 0x0f) == 0x01)
              {
                  lcd_show_string(110,
                                     110,
                                     lcd_self.width,
                                     16,
                                     16,
                                     "connectsuccess.....",
                                     BLUE);
              }
              else if ((g_usbdev.status& 0x0f) == 0x00)
              {
                  lcd_show_string(110,
                                     110,
                                     lcd_self.width,
                                     16,
                                     16,
                                     "connectfail........",
                                     BLUE);
              }
      
              LED_TOGGLE();
              vTaskDelay(500);
          }
      }
      

      此部分代碼比較簡單,通過tud_usb_flash()等函數初始化USB。由于該實驗例程需要系統將storage分區模擬成U盤,所以在該函數中需要初始化SPIFFS分區,其次是用USB設備安裝函數,用以USB設備登記。同時,LCD顯示實驗信息,LED閃爍以示程序正在運行。

      45.4下載驗證
      將程序下載到開發板后(注意:USB數據線,要插在USB端口!而不是UART端口!),我們打開設備管理器(我用的是WIN10),在端口(COM和LPT)里面可以發現多出了一個COM25的設備,這就是USB虛擬的串口設備端口,如下圖所示:

      image007

      圖45.4.1 通過設備管理器查看USB虛擬的串口設備端口
      如圖45.4.1,ESP32通過Flash模擬U盤,被電腦識別了,通用串行總線控制器顯示的是:USB大容量存儲設備(其實也不算大,也就差不多4MB...)。此時,開發板的LED在閃爍,提示程序運行。開發板的LCD顯示“connect success.....”,如下圖所示:

      image009

      圖45.4.2 USB虛擬串口連接成功
      然后我們打開“我的電腦”,可以看見界面顯示了通過Flash模擬U盤后的容量大小,如下圖所示:

      image011

      圖45.4.3 ESP32 Flash模擬U盤測試
      至此,Flash模擬U盤實驗就完成了,通過本實驗,我們就可以利用ESP32的Flash進行U盤模擬。

      posted @ 2025-11-03 11:25  正點原子  閱讀(8)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久精品国产久精国产| 国产草草影院ccyycom| 国产精品一区二区三区黄| 国产性三级高清在线观看| 毛片一区二区在线看| 精品无码国产污污污免费| 午夜男女爽爽影院在线| 性奴sm虐辱暴力视频网站 | 欧美人与动人物牲交免费观看 | 免费国产精品黄色一区二区| 国产亚洲中文字幕久久网| 精品 无码 国产观看| 国产mv在线天堂mv免费观看| 蜜臀av入口一区二区三区| 国产视色精品亚洲一区二区 | 国内精品视频区在线2021| 亚洲精品成人福利网站| 亚洲精品美女久久久久99| 色欲久久综合亚洲精品蜜桃| 草草浮力影院| 久久久久无码国产精品一区| 亚洲无线看天堂av| 国产一区二区一卡二卡| 人妻中出无码一区二区三区 | 国产在线拍揄自揄视频网试看 | 中文幕无线码中文字夫妻| 四虎国产精品久久免费地址| 亚洲av无码之国产精品网址蜜芽| 亚洲色无码专区一区| 免费观看激色视频网站| 福利在线视频一区二区| 亚洲国产av无码综合原创国产| 亚洲av色香蕉一区二区| 人妻蜜臀久久av不卡| 富源县| 亚洲女人天堂成人av在线| 羞羞影院午夜男女爽爽免费视频| 关岭| 暖暖 免费 高清 日本 在线观看5 色老头亚洲成人免费影院 | 少妇人妻系列无码专区视频| 在线视频一区二区三区色|