マイコンに内蔵されているRAMは、アクセス時間が速いので、データ転送時間は問題になりませんが、外部メモリを使用する場合は、一般的にアクセス時間が遅く、データ転送に時間がかかります。そのため、オーバーランエラーが発生する可能性が高くなります。
マイコンが外部メモリをアクセスする場合の周波数はシステムクロックよりも遅くなる場合が多い上、外部メモリ自体のアクセス時間が遅く、ウェイトサイクルを入れる必要がある場合があります。これらの要因による外部メモリのトータルのアクセス時間を計算して、余裕をもった受信バッファからの読み出しタイミングを設定しないとオーバーランエラーが発生します。
また、内蔵のフラッシュメモリやEEPROMの読み出し時間は比較的速いですが、書き込み時間は遅い場合が多いです。そのため、フラッシュメモリやEEPROMといったメモリにデータを書き込む場合は時間を考慮して、受信バッファからの読み出しタイミングを設定する必要があります。
受信データのビット数とDMA転送のビット数が異なる場合に、計算を間違わないように注意してください。例えば受信データは16ビットで、DMAは8ビット単位でデータ転送する場合、DMAは受信データを取り出すのに2回転送を行う必要があります。そのためデータ転送に時間がかかりオーバーランエラーの原因になります。
ユーザーは前述した個々の要因に関して、比較的注意深くシステム設計を行っていますが、実際は、これらの要因が複数関係してオーバーランエラーを発生させる場合がほとんどです。
例えば、UARTの通信で16ビットデータを受け取って、DMAまたはCPUで8ビットずつ2回に分けて、外部のメモリに書き込む場合です。通信速度と外部メモリのアクセス時間は、ユーザーがオシロスコープなどを使って実測できますが、DMA転送のスピードやCPUの割り込み処理は内部動作ですので、多くの場合、ユーザーには分かりません。そのため、マイコンベンダーにDMAやCPUの内部処理の詳細を確認して、トータルのデータ転送時間を算出する必要があります。
オーバーランエラーが発生するのは通信ペリフェラルだけではありません。A-Dコンバータでも発生します。A-Dコンバータで周期的に変換を繰り返すと、変換結果を格納するレジスタから変換結果を周期的に取り出さなくてはなりません。変換結果を取り出す前に次の変換結果がレジスタに入ってしまうとオーバーランエラーが発生してしまいます。これは通信ペリフェラルとまったく同じ現象です。
Copyright © ITmedia, Inc. All Rights Reserved.