USB HID

 USB-HIDクラスのバグを修正、アップロードしました。

 

 細かい内容かと思いますが、同様の内容で引っかかる方がおられるかもしれませんので、簡単に概要を紹介したいと思います。

 バグとして起こった内容はCustomHIDを用いてマイコンが受信したところ、メモリの一部が破壊されるという現象でした。

 原因が全く分からずずいぶん悩んだのですが、結局確保していた受信バッファのサイズが不足していたことが原因でした。

 

 USBの各種設定時に受信バッファサイズやレポートディスクリプタの設定をするのでメモリの確保はドライバがうまくやってくれているのだろうと思っていました。しかし実際は

usbd_conf.h

に記載されている

#define MAX_STATIC_ALLOC_SIZE 

が受信バッファのサイズを決めます。

しかもこの定数はバッファサイズででなくバッファを含む構造体

USBD_CUSTOM_HID_HandleTypeDef

のサイズなのでバッファ + 0x14バイト必要です。

 

ということで正解は

#define MAX_STATIC_ALLOC_SIZE   を 

(USBD_CUSTOMHID_OUTREPORT_BUF_SIZE + 0x14) 

とするのが正解ですね。

 

しかし

/*HID Class Driver Structure size*/

ってコメントに書いてあるけど、ちょっとそんな名前じゃわかんないよ~

相変わらずUSBドライバは複雑でよくわからんです。。。