組み込みシステム設計者のためのLIN2.0マイコン実装術(後編) ――スレーブ・ノード用ドライバ・ソフトウェア開発のポイント
3.データの送受信とスリープ処理
ヘッダ処理が完了すると,保護IDの値に応じてレスポンスの送受信を行います.この部分は,動作そのものはごく普通のUARTによる通信です.注意するポイントは,メッセージ・バッファへのアクセス競合です.
● データ送受信時はアクセス競合に注意
図13は,スレーブから送信する場合のメッセージ・バッファのようすを単純化したものです.API(application programming interface)からは時間順にメッセージ・バッファにデータを書き込んでいきます.一方,LINバスからもこれとは非同期に送信要求が来ます.そのため,あるタイミングでドライバからの読み出しが発生します.設計上なにも考慮していないと,新旧混在したデータを送信してしまうことになります.逆に,スレーブが受信の場合も同じような問題が起こります.データが新旧混在しても問題ないようなシステムでないかぎり,なんらかの対策を行う必要があります.
図13 バッファ・アクセスの競合
APIからの書き込み途中でLINバスからの要求が発生すると,新旧混在のデータを送信してしまう.