2022年01月29日

PIC32MXとPIC32MZのUSB HOST

今回はPIC32MXとPIC32MZでUSB HOST機能の両者の仕様差について紹介します。PIC32MXで動いていたコードがPIC32MZで若干、仕様が異なるためにそのままでは動きませんでした。若干の仕様差について注意すべき点を紹介します。

■PIC32MZはUSB2.0 High Speed対応(480MHz)
 組込系のマイコンの多くはUSB 2.0 Host対応を謳っていても8割、9割はFull Speed対応(12MHz)です。PIC32MXもFull Speed対応(12MHz)です。一部のマイコン、例えばSTM32F7ではFull SpeedとHigh Speedに対応していますが、High Speedの場合、High Speedの信号を処理するためのUSB PHYを内蔵していません(一部内蔵したモデルもあるようです)。そのため、USB3300といったUSB PHYのICを外付けすることが必要です。High Speedの480MHz信号をそのままでは処理しきれないため、USB PHYでパラレル信号に変換してクロックを落としてマイコンに接続することが一般的です。

 一方、PIC32MZは驚くことにHigh Speed対応USB PHYをマイコンに内蔵しています。つまり、High Speedの480MHz信号をマイコンからUSBコネクタに直結可能です。ただし、480MHzの信号を扱うことになるため、基板の配線には特に注意が必要です。480MHzとなると普通のSPIやI2Cのような適当な信号配線では全く動きません。目安としてマイコンとUSBコネクタまでの配線長は最大75mm程度、30mm以下が理想でD+とD-の配線差は最大2.5mm、直角でなく、45度に曲げるといったUSB2.0に準拠するため、細心の注意を払って配線する必要があります。kicadの等長配線、差動ペアの配線方法は以前に紹介した通りです。Full Speedと同じような感覚でいつものように適当に配線してしまい、まったくUSBを認識できませんでした。仕方なくパターンを切って外付けで差動ペアを配線したところ、正常に認識することができました。

PIC32MZ1.jpg

即席で作った基板では当然ながらHigh Speedの480MHzに耐えられず、写真のように配線パターンを切ってからポリウレタン銅線のツイストペアケーブルでジャンパさせると正常に通信できました。

■PIC32MZはVBUS電圧レベルを厳密に監視
 PIC32MXのVBUSピンはONかOFFかを見ているだけだったため、適当に3.3Vを入れておけばUSB機能を利用することができました。一方、PIC32MZのVBUSピンは内部にコンパレータを内蔵しており、厳密にVBUS電圧レベルを監視しています。PIC32MXと同じ感覚で3.3Vを入れたところ、DRV_USBHS_Tasks内のDRV_USBHS_TASK_STATE_RUNNINGの途中で停止してしまいました。PLIB_USBHS_VBUSLevelGetで電圧レベルを取得しており、VBUSに5Vを入れると正常に状態遷移することができました。VBUSピンはPIC32MX、PIC32MZ含めて最大5.5Vまで印加可能なため、正しくはUSB電源に接続すべきピンです。マイコンのピンを外部電源系にそのまま接続するのは過電圧保護やESD対策等を考えると気が引けるため、3.3Vを接続していました。PIC32MZではそれが通用しないことが分かりました。


PIC32MZ2.jpg

ポリウレタン銅線でVBUSピンの電源を3.3Vから5Vにジャンパさせると正常に状態遷移することが確認できた。


■その他
 High Speedの場合、Full Speedに比べてよりデバイスの消費電力が上がる傾向があります。電源配線幅、場合によってはコンデンサ等で安定したUSB電源をデバイスに供給できるように注意が必要です。USBデバイスを認識するものの、その後、デバイスの処理を開始するとUSBデバイスがリセットする現象に遭遇しました。オシロで確認するとデバイス処理開始直後に急激な電圧低下が生じていることが分かり、1つ目の写真にもある通り、電解コンデンサで電源を補強するとUSBデバイスがリセットされずに安定してデバイスの処理をすることが確認できました。


 PIC32MZは他のPIC32マイコンと比べると割高な印象がありますが、USB PHY内蔵と考えると、外付けよりもBOMコストを抑えて省配線でHigh Speedに対応できるため、むしろ他のマイコンよりも安いと言えます。今後、USBの他にPIC32MZのEthernet機能等も実験して紹介したいと思います。なお、Ethernet機能についてはPIC32MZでも残念ながら外付けでEthernet PHYのICが必須です。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする