22浏览
查看: 22|回复: 0

[ESP8266/ESP32] FireBeetle 2 ESP32 P4 USB 速度测试

[复制链接]
ESP32 P4 终于开始了量产,可以轻松的在市面上购买到芯片和模块了。
相比之前的型号,这个型号最大的不同是:增加了USB High Speed的支持,这样在 Arduino 开发环境的支持下,

这个芯片可以快捷简单的和PC进行连接,制作出更多的好玩项目。


最近 DFRobot 也推出了对应的 ESP32 P4 开发板:FireBeetle 2 ESP32 P4。笔者有幸拿到一块,这次做一个简单的测试,测试ESP32 P4 的 USB 速度。

FireBeetle 2 ESP32 P4  USB 速度测试图1

可以看到,板子带有2个 TypeC 接口,其中一个是用于下载的接口(来自P4芯片内部),另外一个是可以编程的 TypeC 接口(同样来自P4内部)

FireBeetle 2 ESP32 P4  USB 速度测试图2

开发板上手很简单,使用 Arduino 环境即可。测试的代码是将自身模拟为一个 U盘,上面有一个文件可以用于测试。

代码如下:

  1. #include "USB.h"
  2. #include "USBMSC.h"
  3. #include "256MBDisk.bin.h"
  4. #if ARDUINO_USB_CDC_ON_BOOT
  5. #define HWSerial Serial0
  6. #define USBSerial Serial
  7. #else
  8. #define HWSerial Serial
  9. USBCDC USBSerial;
  10. #endif
  11. USBMSC MSC;
  12. uint32_t findLBA(uint32_t LBA) {
  13.   for (uint16_t i=0; i<415;i++) {
  14.       if (Index[i]==LBA) {
  15.           return i;
  16.         }
  17.     }
  18.   return 0xFFFFFF;  
  19. }
  20. static const uint32_t DISK_SECTOR_COUNT = 520192;
  21. static int32_t onRead(uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize){
  22.   //HWSerial.printf("MSC READ: lba: %u, offset: %u, bufsize: %u\n", lba, offset, bufsize);
  23.   int32_t getLBA=0;
  24.   uint8_t *p;
  25.   p=(uint8_t *)buffer;
  26.   //HWSerial.printf("Buffer1 %X\n", buffer);
  27.   for (uint32_t i=0;i<bufsize/DISK_SECTOR_SIZE;i++) {
  28.      //HWSerial.printf("Check %u\n", lba+i);
  29.      getLBA=findLBA(lba+i);
  30.      //HWSerial.printf("getLBA %u\n", getLBA);
  31.      if (getLBA!=0xFFFFFF) { //如果找到了
  32.         memcpy((void *)&p[i*DISK_SECTOR_SIZE], &msc_disk[getLBA][0], DISK_SECTOR_SIZE);
  33.         //HWSerial.printf("Send %u\n", getLBA);
  34.         //HWSerial.printf("Buffer2 %X\n", (void *)&p[i*DISK_SECTOR_SIZE]);
  35.       } else {
  36.         //HWSerial.printf("Send all zero to %u\n", getLBA);
  37.         for (uint16_t j=0;j<DISK_SECTOR_SIZE;j++) {
  38.               p[i*DISK_SECTOR_SIZE+j]=0;
  39.           }
  40.          
  41.       }
  42.     }
  43.   return bufsize;
  44. }
  45. static bool onStartStop(uint8_t power_condition, bool start, bool load_eject){
  46.   HWSerial.printf("MSC START/STOP: power: %u, start: %u, eject: %u\n", power_condition, start, load_eject);
  47.   return true;
  48. }
  49. static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data){
  50.   if(event_base == ARDUINO_USB_EVENTS){
  51.     arduino_usb_event_data_t * data = (arduino_usb_event_data_t*)event_data;
  52.     switch (event_id){
  53.       case ARDUINO_USB_STARTED_EVENT:
  54.         HWSerial.println("USB PLUGGED");
  55.         break;
  56.       case ARDUINO_USB_STOPPED_EVENT:
  57.         HWSerial.println("USB UNPLUGGED");
  58.         break;
  59.       case ARDUINO_USB_SUSPEND_EVENT:
  60.         HWSerial.printf("USB SUSPENDED: remote_wakeup_en: %u\n", data->suspend.remote_wakeup_en);
  61.         break;
  62.       case ARDUINO_USB_RESUME_EVENT:
  63.         HWSerial.println("USB RESUMED");
  64.         break;
  65.       
  66.       default:
  67.         break;
  68.     }
  69.   }
  70. }
  71. static int32_t onWrite(uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize){
  72.   HWSerial.printf("MSC WRITE: lba: %u, offset: %u, bufsize: %u\n", lba, offset, bufsize);
  73.   return bufsize;
  74. }
  75. void setup() {
  76.   HWSerial.begin(115200);
  77.   HWSerial.setDebugOutput(true);
  78.   USB.onEvent(usbEventCallback);
  79.   MSC.vendorID("ESP32");//max 8 chars
  80.   MSC.productID("USB_MSC");//max 16 chars
  81.   MSC.productRevision("1.0");//max 4 chars
  82.   MSC.onStartStop(onStartStop);
  83.   MSC.onRead(onRead);
  84.   MSC.onWrite(onWrite);
  85.   MSC.mediaPresent(true);
  86.   MSC.begin(DISK_SECTOR_COUNT, DISK_SECTOR_SIZE);
  87.   USBSerial.begin();
  88.   USB.begin();
  89. }
  90. void loop() {
  91.   // put your main code here, to run repeatedly:
  92. }
复制代码


需要特别注意

1.选择 TinyUSB
FireBeetle 2 ESP32 P4  USB 速度测试图3

2.型号使用 P4
FireBeetle 2 ESP32 P4  USB 速度测试图4

连接板卡上方 TypeC 即可烧录, 然后连接右侧的TypeC,系统中会出现一个U盘

FireBeetle 2 ESP32 P4  USB 速度测试图5


测试显示速度可以稳定在 10MB/S 左右。

FireBeetle 2 ESP32 P4  USB 速度测试图6

之前的 ESP32 S2/S3 同样代码最高速度在 750KB/S 左右。相比之下速度提升了 13倍。相信未来可以研究出更多的 ESP32 P4 的玩法。

完整代码在: 下载附件ESP32S2256DSK_FullSize.zip
参考:
1.https://www.lab-z.com/fakeud/  ESP32 S2 上实现假U盘(ESP32 2.0.1 )
2.https://mc.dfrobot.com.cn/thread-309859-1-1.html  ESP32 S2 做一个假U盘


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

本版积分规则

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

硬件清单

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

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

mail