[进阶]做一个Micro USB Host 精华

693浏览
查看: 693|回复: 5

[进阶] 做一个Micro USB Host

[复制链接]
本帖最后由 zoologist 于 2022-3-6 11:58 编辑

去年最火爆的就是芯片了,我在214月购买的 MAX3421芯片还只要16.6
usbm1.png
而今天再点进去查看报价已经达到了 130 (咨询下来预期50左右):
usbm2.png

于是萌发了制作一个能够多次复用模块的想法,简单的说设计足够小的 PCB 然后将芯片焊接在上面,将必要的引脚引出,使其成为一个“模块”。
电路图设计如下:
usbm3.png
为了保证体积足够小,使用了贴片式晶振,这个晶振有4个引脚,分别是2 GND 1XO 一个XI;尺寸是 3.2x2.5mm 厚度是 0.7mm,因此这种封装也被称作SMD3225-4P
usbm4.png
PCB 设计如下:
usbm5.png
为了尽量缩减体积,上面只保留必要的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

usbm6.jpg
焊接完成后,我们就可以在 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. }
复制代码
usbm7.png

usbm8.png

电路图和PCB下载(立创EDA)
MicroUSBHost.zip (44.03 KB, 下载次数: 25)

赤星三春牛!  中级技匠

发表于 2022-2-9 11:16:34

哇!!!!
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-2-9 11:17:36

厉害啊!
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-2-9 11:18:38

6666666666
回复

使用道具 举报

DFHJEgrEf3r  学徒

发表于 2022-2-9 14:25:01

TAIZANLEBA
回复

使用道具 举报

QQQQQQQ  高级技师

发表于 2022-2-11 14:17:57

厉害厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail