2009年2月18日水曜日

Alternate Functionとピンの重複

複数の周辺回路が同一のI/Oに割り当てられている場合の問題と対策について調べた。STM32シリーズエラッタシート内の「STM32F10xx Silicon Limitations」において、 Alternate Function で生じる問題について書かれていた。

CAN と USART1 間の問題

リマップをしない状態では、CANで使われるRX/TXはそれぞれ、USART1のCTS/RTSとPA11/12ピンを共有する。RXとCTS、TXとRTSはそれぞれ入力と出力なので、PA11/12ピンはそれぞれAlternate In と Alternate Out と設定して使用する。

このとき、CANが割り当てられてはいるが使わない(not clocked)場合においても、PA12ピンでは'1'が出力されてしまうという不具合があるらしい(エラッタシートP.7)。そのため、CTS/RTSを使ったハードウェアフロー制御が行えなくなる。フロー制御を行いたい場合、CANの使用にかかわらず、CANをPA11/12以外にリマップしなくてはならない。(CAN_REMAPを"00"以外にすればよい)

SPI1とUSART2間の問題(エラッタ2.4.2 - 2.4.3)

USART2はPA0からPA4をCTS, RTS, TX, RX, CKとして使い、同期通信が可能となっている。一方SPI1は、PA4からPA7を nSS, SCK, MISO, MOSIとして使っている。 (どちらもリマップを行わない状態において)

USART2のCKは、同期通信モードを有効にすると出力になり、それ以外は使用されない。 SPIはマスター/スレーブを切り替えることができ、スレーブセレクト(nSS)はマスターで出力、スレーブで入力となる。

エラッタシートの2.4.2によればSPIスレーブ時はUSART2は同期通信モードを使用できない(対策はない)という。これは、USARTの出力するクロックがスレーブセレクトへ入力されてしまうためと考えられる。また2.4.3によれば、SPIマスター時にSPIのスレーブセレクトを出力しないよう設定すれば、USART同期通信モードを使用することは可能という。このためにはSPI_CR2のSSOE(Slave Select Output Enable)ビットをクリアすればよい。

これらの記述から分かったこと

周辺回路のピンが重複している場合においても、どちらかが重複箇所を使用しないよう設定することができれば、機能は限定されるものの共存は可能であることが伺える。(ピンが重複していて、どちらもそのピンを使用しないように設定できないなら共存はできない)。 大抵は何らかのイネーブルレジスタが用意されているようだ。 リマップ後に重複するような場合についても、同様だと思われる。

ピンが重複している場合でも、CANとUSART1のような例外を除き、基本的には片方が停止していれば問題ないと思われる。

マイコンの中は設定可能だが、基板の配線は決まっている。リセット直後は基板にあわせたコンフィギュレーションを行う必要があるため、コンフィギュレーションとその後のGPIOロック(リファレンスマニュアル参照)を行うルーチンを用意しておく必要がありそうだ。 設定を正しく行えないと、最悪の場合は外部のICとI/Oを破壊する可能性もあるため、コンフィギュレーションについては慎重に行う必要がありそうだ。

重複ピンの内部で出力同士が衝突するかについては記述されていないが、破壊されるようなことはないと信じたい(ORバスのような何かで直接は衝突しないはず...)。

0 件のコメント:

コメントを投稿