精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32入門學習筆記之USB讀卡器實驗1

jf_78858299 ? 來源:滑小稽筆記 ? 作者:電子技術園地 ? 2023-02-16 15:59 ? 次閱讀

22.1 USB概述

USB是英文Universal Serial BUS(通用串行總線)的縮寫,是一個外部總線標準,用于規范電腦與外部設備的連接和通訊。是應用在PC領域的接口技術。USB接口支持設備的即插即用和熱插拔功能。

是在1994年底由英特爾、康柏、IBM、Microsoft等多家公司聯合提出的。發展到現在已經有USB1.0/1.1/2.0/3.0/3.1等多個版本。目前用的最多的就是USB2.0和USB3.0,USB3.1目前已經開始普及。

STM32F103自帶的USB符合USB2.0規范。標準USB共四根線組成,除VCC和GND外,另外為D+,D-,這兩根數據線采用的是差分電壓的方式進行數據傳輸的。在USB主機上,D-和D+都是接了15K的電阻到低的,所以在沒有設備接入的時候,D+、D-均是低電平。

而在USB設備中,如果是高速設備,則會在D+上接一個1.5K的電阻到VCC,而如果是低速設備,則會在D-上接一個1.5K的電阻到VCC。這樣當設備接入主機的時候,主機就可以判斷是否有設備接入,并能判斷設備是高速設備還是低速設備。

STM32F1自帶一個USB從機控制器,符合USB規范通信,PC主機和微控制器之間的數據傳輸是通過共享一個專用的數據緩沖區來完成的,該數據緩沖區能被USB外設直接訪問,這塊專用數據緩沖區的大小由所使用的端點數目和每個端點最大的數據分組大小所決定,每個端點最大可使用512字節緩沖區,最多可用于16個單向或8個雙向端點。

USB模塊同PC主機通信,根據USB規范實現令牌分組的檢測,數據發送/接收的處理,和握手分組的處理。整個傳輸的格式由硬件完成,其中包括CRC的生成和校驗。

每個端點都有一個緩沖區描述塊,描述該端點使用的緩沖區地址、大小和需要傳輸的字節數。當USB模塊識別出一個有效的功能/端點的令牌分組時,(如果需要傳輸數據并且端點已配置)隨之發生相關的數據傳輸。

USB模塊通過一個內部的16位寄存器實現端口與專用緩沖區的數據交換。在所有的數據傳輸完成后,如果需要,則根據傳輸的方向,發送或接收適當的握手分組。在數據傳輸結束時,USB模塊將觸發與端點相關的中斷,通過讀狀態寄存器和/或者利用不同的中斷來處理。USB設備架構如圖所示。

圖片

USB的中斷映射單元:將可能產生中斷的USB事件映射到三個不同的NVIC請求線上:

(1)USB低優先級中斷(通道20):可由所有USB事件觸發(正確傳輸,USB復位等)。在處理中斷前應首先確定中斷源。

(2)USB高優先級中斷(通道19):僅由同步和雙緩沖批量傳輸的正確傳輸事件觸發,為保證最大的傳輸速率。

(3)USB喚醒中斷(通道42):由USB掛起模式的喚醒事件觸發。

注:USB和CAN共用一個專用的512字節的SRAM存儲器用于數據的發送和接收,因此不能同時使用USB和CAN(共享的SRAM被USB和CAN模塊互斥地訪問)。USB和CAN可以同時用于一個應用中但不能在同一個時間使用。

22.2 實驗例程

如果需要正常的使用STM32F1系列的USB模塊,就需要編寫USB驅動程序,這部分程序非常復雜,需要了解整個USB通信的詳細過程,針對這個問題,ST公司提供了一個官方的USB驅動庫,用戶可以通過直接移植官方驅動庫來實現USB讀寫控制。

我們現在直接利用官方的USB驅動源碼來通過計算機進行SD卡和Flash的讀寫,這里我們需要對官方源碼進行一些修改,用于實現這個效果。

22.2.1 USB源碼概述

USB Mass Storage類支持兩個傳輸協議:

(1)Bulk-Only傳輸(BOT)

(2)Control/Bulk/Interrupt傳輸(CBI)

MassStorage類規范定義了兩個類規定的請求:Get_Max_LUN和MassStorageReset,所有的MassStorage類設備都必須支持這兩個請求。

(1)Get_Max_LUN(bmRequestType=10100001 bandb Request=11111110b)用來確認設備支持的邏輯單元數。MaxLUN的值必須是0~15。注意:LUN是從0開始的。主機不能向不存在的LUN發送CBW,本章我們定義MaxLUN的值為1,即代表2個邏輯單元。

(2)MassStorageReset(bmRequestType=00100001 bandb Request=11111111b)用來復位MassStorage設備及其相關接口。

支持BOT傳輸的MassStorage設備接口描述符要求如下:

(1)接口類代碼bInterfaceClass=08h,表示為MassStorage設備。

(2)接口類子代碼bInterfaceSubClass=06h,表示設備支持SCSIPrimaryCommand-2(SPC-2)。

(3)協議代碼bInterfaceProtocol有3種:0x00、0x01、0x50,前兩種需要使用中斷傳輸,最后一種僅使用批量傳輸(BOT)。

(4)支持BOT的設備必須支持最少3個endpoint:Control,Bulk-In和Bulk-Out。USB2.0的規范定義了控制端點0。Bulk-In端點用來從設備向主機傳送數據(本章用端點1實現)。Bulk-Out端點用來從主機向設備傳送數據(本章用端點2實現)。

ST官方的例程是通過USB來讀寫SD卡(SDIO方式)和Nand Falsh,支持2個邏輯單元,我們在官方例程的基礎上,只需要修改SD驅動部分代碼,并將對Nand Falsh的操作修改為對SPI Falsh的操作。只要這兩步完成了,剩下的就比較簡單了,對底層磁盤的讀寫,都是在mass_mal.c文件實現的,所以我們只需要修改該函數的MAL_Init、MAL_Write、MAL_Read和MAL_GetStatus等4個函數,與我們的SD卡和SPI Falsh對應起來即可。

22.2.2 源碼移植過程

(1)需要添加的文件如下表所示。

文件名 目錄 功能
usb_core.c ....\\USB\\CORE 用于處理USB2.0協議
usb_init.c 用于USB控制器的初始化
usb_int.c 負責USB的中斷處理
usb_mem.c 負責處理PMA數據,即STM32內部用于USB/CAN的專用數據緩沖區
usb_regs.c 負責USB控制寄存器的底層操作
usb_sil.c 為USB端點提供特殊簡化的讀寫訪問函數
usb_desc.c ...\\USB\\CONFIG 用于虛擬通信端口描述符的處理
usb_endp.c 用于非控制傳輸,處理正確傳輸中斷回調函數
usb_istr.c 用于處理USB中斷
usb_prop.c 用于處理所有虛擬通信端口相關事件,包括初始化,復位等
usb_pwr.c 用于管理USB的電源狀態
usb_scsi.c 與SCSI命令相關的所有處理
scsi_data.c 定義了SCSI數據
memory.c 定義USB通信的存儲區讀寫函數
mass_mal.c 定義了USB通信的讀寫操作底層函數接口
usb_bot.c 定義了BOT傳輸協議
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    7900

    瀏覽量

    264015
  • PC
    PC
    +關注

    關注

    9

    文章

    2066

    瀏覽量

    154033
  • 總線
    +關注

    關注

    10

    文章

    2868

    瀏覽量

    87994
收藏 人收藏

    評論

    相關推薦

    STM32 SD-USB讀卡器實驗(神舟I號)

    STM32 SD-USB讀卡器實驗(神舟I號
    發表于 03-21 15:20

    stm32USB讀卡器實驗源碼

    ***_bot.h"http://ALIENTEK戰艦STM32開發板實驗50//USB讀卡器 實驗//設置USB
    發表于 07-04 02:29

    電腦相關的讀卡器

    ,SM卡讀卡器,PCMICA讀卡器和記憶棒讀卡器。此外,還有一個雙插槽讀卡器,可同時支持兩個或更多卡。此外,根據端口類型,讀卡器可分為三類:
    發表于 09-16 16:51

    usb讀卡器萬能驅動下載

    usb讀卡器萬能驅動下載
    發表于 01-12 10:15 ?451次下載

    讀卡器的接口類型

    讀卡器的接口類型              接口類型是指讀卡器與電腦主機之間的連接方式和類型。目前讀卡器都是采用
    發表于 01-09 15:06 ?4346次閱讀

    ALIENTEK_MINISTM32_實驗27_USB讀卡器

    ALIENTEK MINISTM32 實驗27 USB讀卡器,很好的學習資料,快來下載吧
    發表于 02-19 11:41 ?12次下載

    基于STM32RFID的讀卡器資料(全套完整)

    基于STM32RFID的讀卡器資料(全套完整),吧友提供,我只是打包后上傳,謝謝下載
    發表于 07-01 17:35 ?718次下載

    基于STM32USB讀卡器的設計

    基于STM32USB讀卡器的設計
    發表于 09-25 11:11 ?29次下載
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>USB</b><b class='flag-5'>讀卡器</b>的設計

    usb3.0和usb2.0讀卡器對比

    手里有個品勝的USB2.0讀卡器,電腦配置更新之后帶有3.0接口,所有買了個3.0的讀卡器,選來選去感覺還是螃蟹芯片好些,入了一個“川宇C396”,之前有個老的8G內存卡。還有個前年買了一個威剛
    發表于 05-15 16:09 ?2.5w次閱讀

    USB讀卡器(SLAVE)應用實驗的詳細直流概述免費下載

    本文檔的主要內容詳細技術的是USB讀卡器(SLAVE)應用實驗的詳細資料概述免費下載。
    發表于 09-11 08:00 ?4次下載

    筆記本的讀卡器有何用處 讀卡器的類型介紹

    曾幾何時,多合一讀卡器筆記本身上的標配,可以方便我們讀取數碼相機、行車記錄儀等數碼產品內置存儲卡中的數據。然而,如今筆記本領域讀卡器的境遇卻發生了變化。 漸被遺忘的插槽 隨著
    的頭像 發表于 01-24 10:48 ?1.3w次閱讀

    UM1799_STM32Nucleo的NFC讀卡器入門

    UM1799_STM32Nucleo的NFC讀卡器入門
    發表于 11-22 19:25 ?3次下載
    UM1799_<b class='flag-5'>STM32</b>Nucleo的NFC<b class='flag-5'>讀卡器</b><b class='flag-5'>入門</b>

    STM32入門學習筆記USB讀卡器實驗2

    USB是英文Universal Serial BUS(通用串行總線)的縮寫,是一個外部總線標準,用于規范電腦與外部設備的連接和通訊。是應用在PC領域的接口技術。USB接口支持設備的即插即用和熱插拔功能。
    的頭像 發表于 02-16 15:59 ?773次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>入門</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b><b class='flag-5'>USB</b><b class='flag-5'>讀卡器</b><b class='flag-5'>實驗</b>2

    STM32入門學習筆記USB讀卡器實驗3

    USB是英文Universal Serial BUS(通用串行總線)的縮寫,是一個外部總線標準,用于規范電腦與外部設備的連接和通訊。是應用在PC領域的接口技術。USB接口支持設備的即插即用和熱插拔功能。
    的頭像 發表于 02-16 16:00 ?1426次閱讀

    基于STM32單片機USB讀卡器使用庫文件設計源代碼

    基于STM32單片機USB讀卡器使用庫文件設計源代碼
    發表于 04-26 14:53 ?4次下載