做一个Micro USB Host

2022-02-081万
精华项目
AI 快速预览详细 收起
本文介绍了如何设计一个可复用的Micro USB Host模块,使用MAX3421芯片。文章提供了详细的电路图和PCB设计,并展示了如何在FireBeetle上进行测试。通过使用USB Host Shield 2.0库,可以实现鼠标控制等功能。


去年最火爆的就是芯片了,我在214月购买的 MAX3421芯片还只要16.6
做一个Micro USB Host图1
而今天再点进去查看报价已经达到了 130 (咨询下来预期50左右):
做一个Micro USB Host图3

于是萌发了制作一个能够多次复用模块的想法,简单的说设计足够小的 PCB 然后将芯片焊接在上面,将必要的引脚引出,使其成为一个“模块”。
电路图设计如下:
做一个Micro USB Host图2
为了保证体积足够小,使用了贴片式晶振,这个晶振有4个引脚,分别是2 GND 1XO 一个XI;尺寸是 3.2x2.5mm 厚度是 0.7mm,因此这种封装也被称作SMD3225-4P
做一个Micro USB Host图4
PCB 设计如下:
做一个Micro USB Host图5
为了尽量缩减体积,上面只保留必要的5个电容,同时选用 0603封装的,不得不承认,0603封装能够极大方便布线。
  
名称
  
用途

用途
名称
INT
用于MAX3421通知单片机有中断发生
SPI的MOSI
MOSI
GND
SPI的MISO
MISO
MD-
USB Host D-
SPI的片选
SS
MD+
USB Host D+
SPI的 CLOCK
SCLK
VBCOMP
检查USB 设备的 VBUS 是否存在
芯片的 RESET Pin, 正常情况下必须为高
RESET
GND
芯片供电
3.3V

做一个Micro USB Host图6
焊接完成后,我们就可以在 FireBeetle 上进行测试了:
首先,FireBeetle VCC USB 母头供电,同时共地,其余引脚连接如下:
  
名称
  
FireBeetle

FireBeetle
名称
INT
D3
IO23
MOSI
GND
GND
IO19
MISO
MD-
USB 母头 D-
D7
SS
MD+
USB 母头 D+
IO18
SCLK
VBCOMP
USB 母头 5v
3.3V
RESET
GND
GND
3.3V
3.3V

之后就可以直接使用 USB Host Shield 2.0 的库了,比如运行 \USBHIDBootMouse.ino 这个示例:

  1. #include <hidboot.h>
  2. #include <usbhub.h>
  3. // Satisfy the IDE, which needs to see the include statment in the ino too.
  4. #ifdef dobogusinclude
  5. #include <spi4teensy3.h>
  6. #endif
  7. #include <SPI.h>
  8. class MouseRptParser : public MouseReportParser
  9. {
  10. protected:
  11.         void OnMouseMove        (MOUSEINFO *mi);
  12.         void OnLeftButtonUp        (MOUSEINFO *mi);
  13.         void OnLeftButtonDown        (MOUSEINFO *mi);
  14.         void OnRightButtonUp        (MOUSEINFO *mi);
  15.         void OnRightButtonDown        (MOUSEINFO *mi);
  16.         void OnMiddleButtonUp        (MOUSEINFO *mi);
  17.         void OnMiddleButtonDown        (MOUSEINFO *mi);
  18. };
  19. void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
  20. {
  21.     Serial.print("dx=");
  22.     Serial.print(mi->dX, DEC);
  23.     Serial.print(" dy=");
  24.     Serial.println(mi->dY, DEC);
  25. };
  26. void MouseRptParser::OnLeftButtonUp        (MOUSEINFO *mi)
  27. {
  28.     Serial.println("L Butt Up");
  29. };
  30. void MouseRptParser::OnLeftButtonDown        (MOUSEINFO *mi)
  31. {
  32.     Serial.println("L Butt Dn");
  33. };
  34. void MouseRptParser::OnRightButtonUp        (MOUSEINFO *mi)
  35. {
  36.     Serial.println("R Butt Up");
  37. };
  38. void MouseRptParser::OnRightButtonDown        (MOUSEINFO *mi)
  39. {
  40.     Serial.println("R Butt Dn");
  41. };
  42. void MouseRptParser::OnMiddleButtonUp        (MOUSEINFO *mi)
  43. {
  44.     Serial.println("M Butt Up");
  45. };
  46. void MouseRptParser::OnMiddleButtonDown        (MOUSEINFO *mi)
  47. {
  48.     Serial.println("M Butt Dn");
  49. };
  50. USB     Usb;
  51. USBHub     Hub(&Usb);
  52. HIDBoot<USB_HID_PROTOCOL_MOUSE>    HidMouse(&Usb);
  53. MouseRptParser                               Prs;
  54. void setup()
  55. {
  56.     Serial.begin( 115200 );
  57. #if !defined(__MIPSEL__)
  58.     while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
  59. #endif
  60.     Serial.println("Start");
  61.     if (Usb.Init() == -1)
  62.         Serial.println("OSC did not start.");
  63.     delay( 200 );
  64.     HidMouse.SetReportParser(0, &Prs);
  65. }
  66. void loop()
  67. {
  68.   Usb.Task();
  69. }
复制代码
做一个Micro USB Host图7

做一个Micro USB Host图8

电路图和PCB下载(立创EDA)

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(5)
Mr-k
Mr-k
厉害厉害
DFHJEgrEf3r
DFHJEgrEf3r
TAIZANLEBA
三春牛-创客
三春牛-创客
6666666666
三春牛-创客
三春牛-创客
厉害啊!
三春牛-创客
三春牛-创客
哇!!!!
- 没有更多了 -