SPI通信などのノイズ対策や、誤動作への対処法:Q&Aで学ぶマイコン講座(90)(3/3 ページ)
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初心者の方からよく質問される「SPI通信などのノイズ対処法」についてです。
ソフトウェアの対処法
(1)エラー検出
例えば、クロックラインにノイズが乗って、クロックが1発多く入力されると、通信機能の入力バッファーのシフターがデータを1ビット余分に受信してシフトします。その後、正常なクロックが入力され、最終的に最初のビットを消して、異常値を受信してしまいます。図4は、ノイズによってD4を2回受信して、D0がシフトアウトされ欠落する例ですが、この他にも受信データの変化点でノイズが入ると、異常値を受信することが考えられます。このように、ノイズが入るタイミングによってさまざまなエラーパターンが想定されます。いずれの場合も、結果的に受信データは異常になります。受信データの異常は、パリティチェックやCRCを使うと検出することができます。また、クロックが正常よりも多く入力されるとオーバーランが検出されるため、ソフトウェアでエラーを検出し、再送するように送信側に依頼します。
STM32L5x2マイコンのSPIには、オーバーランフラグOVRやCRCエラーフラグCRCERRがあるので、それらのフラグをチェックすることで検出可能です。
CRCチェックでは、まずSPIx_CR1 レジスタの CRCEN ビットをセットし、CRCを有効にします。
受信が始まると、シフトレジスタに受信された値のCRCを計算し、同時に送られてくるCRC の値と一致しなかった場合、CRCERRフラグがセットされるのでCRCエラーを検出できます。
クロックラインにノイズが乗って、クロックが1発多く入力される事象以外でも、通信中に発生したエラーはSPIエラーフラグを使って検出できます。オーバーランやCRCエラーの他にも、モードフォールトやフォーマットエラーといったエラーがあります。いずれもERRIEビットをセットしておくことでSPI割り込みが発生し、検出できます。
(2)通信機能のリセット
データの再送で解決できる程度の軽いエラーであれば回復は簡単ですが、通信モジュール自体が回復不能な状態に陥った場合、モジュール自体の初期化が必要です。一番簡単な初期化方法は、マイコン全体をソフトウェアでリセットすることです。しかし、それでは正常に動作していた他の機能も初期化されてしまい、システムに支障をきたします。
例えば、SPIを初期化するには、入力バッファーをクリアにして各レジスタを初期値に戻すか、当初の設定に戻してSPIを再起動する必要があります。
STM32L5x2マイコンには、ペリフェラルリセットレジスタという周辺機能を個別に初期化できるレジスタがあります。
例えば、ペリフェラルリセットレジスタ 1(RCC_APB1RSTR1)のビット15「SPI3RST」を1に設定すると、SPI3の機能が初期状態に戻ります。SPI2であればビット14「SPI2RST」です。SPI1であればペリフェラルリセットレジスタ2(RCC_APB2RSTR)のビット12「SPI1RST」です。
これらのビットを1にした後、SPIの初期化ルーティンへ飛んでいき、SPIを再設定するとSPIは復活します。もともと、初期化ルーティンの中にペリフェラルリセットレジスタを設定するコードを入れておくと、周辺機能のエラー時に初期化ルーティンを実行するだけで、SPIを復活させることができます。こうすれば、エラー時の処理専用ルーティンと兼用できます。
STM32L5x2マイコンを含むSTM32ファミリー*4)の製品は、HAL(ハードウェア抽象化レイヤー)を使ってプログラムを作りますが、HALには、
HAL_<ペリフェラル名>_Init()
という関数が準備されています。これを呼び出すことで周辺機能の初期化を簡単に行うことができます。
(*4)STM32ファミリー
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- クロックとは ーーマイコンにクロックが必要な理由
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初心者の方からよく質問される「マイコンのクロック」についてです。 - マイコンに搭載されているセンターアラインPWMって何?
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、中級者の方からよく質問される「マイコンに搭載されているセンターアラインPWMって何?」についてです。 - マイコンに搭載されているDMAって何?
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、中級者の方からよく質問される「マイコンに搭載されているDMAって何?」についてです。 - D-Aコンバーターの仕組みと使い方
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初心者の方からよく質問される「D-Aコンバーターの仕組みと使い方」についてです。 - RTC(Real Time Clock)の機能と使い方
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初心者の方からよく質問される「RTC(Real Time Clock)の機能」についてです。 - CRC(Cyclic Redundancy Check:巡回冗長検査)って何?
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初心者の方からよく質問される「CRC(巡回冗長検査)」についてです。