2024年10月31日木曜日

STM32H723 USB BULK転送したい(2)CDC Classを改造

STM32H723をtargetとして、STM32CubeIDEでCDC Classを生成し、これを雛形にBULK transferを行います.

改造動画が在ったのでこれを参考にしました.githubにもおいてある.
youtube動画でsource codeを改造しているのですぐに過ぎ去ってしまいます.
ポイントを抜き出すと、こんな事をやっています.

usbd_desc.c
先頭
#include "usbd_desc.h"  追加

156行
  0x00,   /*bDeviceClass*/
  0x00,   /*bDeviceSubClass*/
CDC classなら2だったのを0にする.classじゃなくしてるんだろう.

usbd_cdc_if.c
264行
static int8_t CDC_Receive_HS(uint8_t* Buf, uint32_t *Len){
  USBD_CDC_SetRxBuffer(&hUsbDeviceHS, &Buf[0]);
  USBD_CDC_ReceivePacket(&hUsbDeviceHS);
  CDC_Transmit_HS(Buf, *Len);  ←これを追加、LOOPBACK TEST用でしょう
  return (USBD_OK);
}
HOSTから何か送られてきたらここがcallされるんだと思う.処理の要.

usbd_cdc.h
66行
#define USB_CDC_CONFIG_DESC_SIZ    32U    //  67U
descriptorを短縮するので32にする.

usbd_cdc.c
175行
0x01,       /* bNumInterfaces: 1 interfaces */
元はinterfaceが2つ在ったが、1つに減らす

186~234行
1つ目のinterfaceをざっくり削除

source変更はこれだけのようです.ビルド→STMに焼けます.

追記:STM32H723で生じたUSB接続が不安定になるトラブルを回避するため、LPMをdisableにするべきみたいです.CubeMXでMiddleWareの設定のところ.変だと思ったら確認してみましょう.

ーーーー
descriptorを採取してみるなり.
EP1 IN/OUTがBULK transferになっています.
FullSpeedなのでpacket sizeは64byteです.
どのくらいの速度が出るんだろ?

Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0483 STMicroelectronics
  idProduct          0x5740 Virtual COM Port
  bcdDevice            2.00
  iManufacturer           1 HIRASAKA
  iProduct                2 STM32 Virtual ComPort
  iSerial                 3 2C059BB94004
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0020
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0


次回は、Linux HOSTの方からSTMをつついてみましょう.

1へ   3へ

かしこ

0 件のコメント:

コメントを投稿