2017年9月12日火曜日

メモ:STM32F4 USBブートローダーで"USB デバイスが認識されません"

 STM32F4のシステムメモリからUSB DFUで起動しようとした時に"USB デバイスが認識されません"「このコンピュータに最後に接続された USB デバイスが正しく機能していないため、Windows によって認識されません」という警告。
 この場合、STMのペリフェラルに外部がマスターになるバスが通信を行っていないか確認すること。
 僕の場合は、相手の都合を考えずにUSART3にPCからデータを送り続けるソフトを動かしていたのが原因。この場合、STMはUSART3からファームウェアを更新するモードに入ってしまい、USBのポートは初期化されるのにUSBデバイスとして動作しないため、PCから警告が出る。もちろん、USB DFUで更新することもできない。

 STMのアプリケーションノート AN2606(Rev31)によると、デバイスによって異なるが、USART1, USART2, USART3, I2C1, I2C2, I2C3, I2C4, SPI1, SPI2, SPI3, SPI4, CAN1, CAN2 からファームウェアの更新が行える(もっとあるかも)。
 ブートローダーはの優先順位は、USART > I2C > SPI > CAN > USB となっているらしい(デバイスによってペリフェラルの有無が異なったり、場合によっては優先度の違いがあるかも)。
 USARTでデータをブロードキャストするような使い方をする場合、ブートモードに入るときにはバスが切断されるような工夫をする、あるいは、ブートローダーで使用されないUSARTでデータを受信する、といった使い方が必用そう。

 CANでファームウェア書き換えってのは、車載とかを想定してるんだろうなぁ。どうやってデバイスを指定するんだろうか。あとどうやってブートローダを起動するんだろうか。ファームウェアはバス上に流せばいいとしても、マイコンがブートローダーを起動しなきゃいけないから、完全にリモートで操作するのは難しそう。CANから特定のデータを受け取ったらブートローダーモードでリブートする、みたいなプログラムが入ってるんだろうか。

 ということで、USB DFUが起動しない場合は回りの怪しいデータの流れを気にしてみよう、という話でした。
 気がつくまでに結構手間取ったので、危ないところはマーキング。

0 件のコメント:

コメントを投稿