代码之家  ›  专栏  ›  技术社区  ›  Fern Mendiz

ESP USB接口,不使用串行终端或控制台(tinyusb)

  •  0
  • Fern Mendiz  · 技术社区  · 3 年前

    我最近一直在做一个项目,该项目要求我通过USB将ESP32-S3与一台独立的主计算机接口,基本要点是我希望中央设备能够从ESP接收简单的2字节数据包,反之亦然。

    我一直在看esp的一些示例代码(特别是串行设备示例,我知道这与我的意图相矛盾),以及阅读USB设备驱动程序、USB OTG控制台和USB串行/JTAG控制器控制台的API参考,从所有这些中,我一直在试图找出如何从USB发送16位void*输出,然后(也从USB)接收类似的输入并查看它。

    通过阅读文档和示例,我假设USB由 tinyusb_cdcacm_register_callback 函数,当我研究它时,它并没有得到很好的文档记录,该函数中有一个函数 get_acm 它返回给定的内部的子类对象 esp_tusb_cdcacm_t ,然后这个函数里面有另一个函数,我决定不读,因为我一无所获,似乎逆向工程这个代码不是我的最佳选择,所以我来这里寻求一些帮助,也许我可以找到一些类似于

    bool send(uint16_t packet){
       // assumes USB has been set up earlier
       // Literally just take the packet and transmit it over
       // return success or fail
    }
    
    uint16_t receive(/*device*/){
       // Once again assumed the USB has been setup already
       // Checks to see what's coming in from the USB
       // Returns the value if success, 0 if fail
    } 
    

    同样重要的是要注意,我一直在查看ESP文档,而不是tinyusb文档,我知道tinyusb是自己的库,有自己的文档。这只是因为我看到了ESP代码,它似乎使用了一个专门为ESP32制作的稍微修改过的tusb版本。

    另一个重要的细节是,我还计划用自己的代码读取发送的信号。因此,其他代码也应该做同样的事情,只需查看从USB端口输入的内容,并发送一些回报(除了主设备将通过USB连接多达4个ESP32)。

    这是可能的还是建议的?有更好的方法吗?我不想被交给代码,只是可能会找到正确的方向,我可以在哪里找到类似的例子,或者我是否应该从USB切换到使用GPIO或UART端口之类的东西,这是我在以前的项目中更熟悉的。有没有办法单独驱动D+和D-?(我想我理解他们应该如何工作……但我这么说基本上是在说我对此一无所知)

    1 回复  |  直到 3 年前
        1
  •  1
  •   0___________    3 年前

    特别是串行设备的例子,我知道这与我的 意向

    是什么阻止您使用USB CDC发送和接收2字节的消息?没有什么我认为你不理解串行通信,并将其与“控制台”混淆

    您也可以使用USB HID类。

    我不建议使用任何自定义类,因为你需要在主机上编写自己的驱动程序,而且它需要高级的USB和主机操作系统知识(我认为这远远超出了你目前的水平[从问题中判断])。所有现代操作系统都“开箱即用”地支持CDC和HID类设备。

    我建议学习一些USB基础知识- some basics in this link

    当你阅读并理解USB是什么以及它是如何工作的时候,你可以自己回答剩下的问题。,