給模塊添加 USB 支持的 USB Host Shield Mini


簡介

圖 1:USB Host Shield Mini

USB Host Shield Mini 是一塊基於 MAX3421E 芯片 的模組。MAX3421E 芯片是帶 SPI 接口既可以用作外設也可以用作主機的的 USB 2.0 控制器[1][2]。

不想每次都輸入一大段名字,下面用縮寫 UHS 表示 USB Host Shield Mini。

對於要擴展 USB 通信功能的模組來說,需要使用 SPI 協議[3]與 UHSM 通信。

UHSM 是 USB Host Shield 的簡化版本,擁有更小的體積,避免成品體積過大。

圖 2:USB Host Shield

體積小是優點,缺點是網絡上比較難找到各個焊盤對應的引腳,只能自己標。

可以在 Arduino 上面找到這塊板的資源[4]。在其他網站上面有 Mini 的資源[5],不過 PCB 板的文件版本過老,打不開。

於是我決定先把這個缺點干掉。

引腳與焊盤的對應關系

板上大多數孔都直接連接到了中間的芯片,芯片上寫着 MAX3421E 。

找到 MAX3421E 芯片的官方網站:

https://www.maximintegrated.com/cn/products/interface/controllers-expanders/MAX3421E.html

里面的【下載數據手冊】可以查看芯片引腳信息。以下引腳圖來自數據手冊:

圖 3:MAX3421E 芯片引腳圖

現在需要把引腳的關系對應起來。注意到 Mini 板上背面有一個 RST,這是 Reset 的縮寫。從圖 3 中找到 RES(也是 Reset 的縮寫),就是芯片右側從下往上數第四根引腳。

回到板上找到連接 RST 焊盤的導線連接的引腳,會發現如果旋轉到如圖 4 的角度,就能和芯片圖對上。

圖 4:UHSM 模組焊盤與芯片引腳對應

把正背面的過孔[6]對應起來:

圖 5:UHSM 正背面過孔對應

注意,圖 5 中左邊的那些 VBUS、INT、GPX、MAX_RST、SS 都是對焊盤的標記,跟它們所覆蓋到的導線沒有關系。

根據過孔的對應關系推出正背面導線的連接關系,把各個焊盤對應的引腳標注出來:

圖 6:UHSM 焊盤對應引腳名稱

  • 取反的 SS、MOSI、MISO、SCLK 用於 SPI 通信[3]。

  • INT 是用於 SPI 的可選項,用於發送中斷(INTerrupt)信號,告知主設備有 USB 事件發生。

  • VL 是邏輯電平[7]的參考電壓,是 SPI 接口和所有其他數字輸入及輸出的參考電平。以 MAX3421E 用於 SPI 的輸出引腳 MISO 為例子。在 VL ≥ 2.5V 且 VL 引腳電流為 +10mA 的時候,MISO 引腳的電壓要高於 VL-0.4 才算輸出高電平。

    從 USB Host Shield 的電路圖來看(Mini 的看不了),MAX3421E 芯片的 Vcc 和 VL 用導線連接在一起,共同連接到 3.3V 的電源。

  • GPIN 0~7 以及 GPOUT 0~7。對於一些不含 SPI 硬件接口的 SPI 主設備,跟這塊芯片通信時需要使用 I/O 引腳模擬,占用了寶貴的 I/O 引腳資源。不過這個芯片提供了 8 個通用輸入(GPIN)和 8 個通用輸出(GPOUT),讓 SPI 主設備不僅不會因為接入該芯片而減少總體 I/O 引腳數量,反而增加了。可以說是非常貼心。

  • 取反的 RES 為低時,會把一些寄存器的狀態設置為默認狀態。

  • GPX 能表示五種信號,根據一個寄存器的某兩個位選擇(其中兩種信號互斥,由另一個寄存器的某一位決定)。

從設備還是主設備?

它作為 USB 端的接收者,是 USB 主設備。同時它作為 SPI 數據發送方,是 SPI 從設備。

SPI 通信

SPI 協議占用四個引腳,從設備選擇(取反的 SS,Slave Select),時鍾信號(SCLK),主設備輸出(MOSI),從設備輸出(MISO)。

關於 SPI 協議的介紹以及四個引腳的作用,可以看上一篇:

https://www.cnblogs.com/schaepher/p/14521055.html (設備間數據通信 —— 串行外設接口(SPI)協議)

文章中提到主設備在編程時,需要根據從設備的信息配置兩個選項:

  • SPI 模式
  • First Bit

從數據手冊[1][2]的SCLK(串行時鍾)部分寫着:

MAX3421E 在 SCLK 的下降沿改變其輸出數據(MISO),在 SCLK 的上升沿采樣輸入數據(MOSI)

因此主設備選 (0,0) 或者 (1,1) 都行。

數據手冊的應用信息一節里的 SPI 接口部分寫着:

所有 SPI 傳送都是 MSB 在前

所以設置 First Bit 時,應設置為 MSB。

另外 MAX3421E 對 SCLK 最高頻率限制在 26MHz。

供電

MAX3421E 的工作電壓范圍為 3.0V ~ 3.6V,通常約定使用 3.3V 的電源[8]。

由於 USB 外設(如鍵盤)的工作電壓通常為 5.0V,因此不能使用板上提供的電壓。

圖 7:USB 四條導線及供電焊盤

USB 的 Vcc 連接着一個焊盤,即圖 7 中標號 1 的地方。這個是 PCB 板設計者預留的一個供電口。

如果只需要 3.3V 的電源,則不需要任何改造,使用默認的導線即可。但如果需要更高的電壓,則需要使用這個預留的供電口。

如果要使用這個供電口,則應先把原先的供電導線切斷。如圖 7 中的黃色標記所示,用小刀或者其他工具按照指示將導線切斷。這樣需要把 5.0V 的電源接到標號 1 的焊盤上。

在這樣操作后,總共需要引入兩個電壓不同的電源到這塊板上。一個 5.0V 的電源引到圖 7 標號 1 的焊盤,另一個 3.3V 的電源引到 VL 焊盤。

編程

UHSM 自身不支持寫入程序,但接入 UHSM 的模塊(例如 Arduino、ESP32)在編程時可以使用 Github 上開源的庫通過 SPI 協議操作 MAX3421E 芯片里的寄存器。

https://github.com/felis/USB_Host_Shield_2.0 (USB_Host_Shield_2.0)

參考

[1]: https://datasheets.maximintegrated.com/cn/ds/MAX3421E_cn.pdf (MAX3421E 數據表(第三版)——中文)
[2]: https://datasheets.maximintegrated.com/en/ds/MAX3421E.pdf (MAX3421E 數據表(第四版)——英文)
[3]: https://www.cnblogs.com/schaepher/p/14521055.html (設備間數據通信 —— 串行外設接口(SPI)協議)
[4]: https://www.arduino.cc/en/Main/ArduinoUSBHostShield&lang= (Arduino USB Host Shield)
[5]: https://chome.nerpa.tech/downloads/#Arduino_USB_Host_Shield_Documentation (
Circuits@Home)
[6]: https://www.cnblogs.com/schaepher/p/14492102.html (快速了解線路板(PCB)基礎知識)
[7]: https://baike.baidu.com/item/%E9%80%BB%E8%BE%91%E7%94%B5%E5%B9%B3 (邏輯電平)
[8]: https://www.zhihu.com/question/22687846/answer/31508409 (為什么很多低功耗的芯片都采用3.3v的電源,這個電壓有什么科學依據嗎?)

其他:

https://www.pjrc.com/teensy/td_libs_USBHostShield.html

https://www.itead.cc/wiki/Arduino_USB_Host_Shield

https://chome.nerpa.tech/arduino_usb_host_shield_projects/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM