STM32H723をtargetとして、STM32CubeIDEでCDC Classを生成し、これを雛形にBULK transferを行います.
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に焼けます.
ーーーー
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をつついてみましょう.
かしこ
0 件のコメント:
コメントを投稿