作品紹介
RXマイコンを使った通信モニタの製作(3)
ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
RX62Nマイコンを使った通信モニタの製作、続きです。
9.受信方法

9-1.TTL,RS-232,RS-485

TTL,RS-232,RS-485は、いずれも調歩同期方式のみ対応なので、すべてRX62NのシリアルコミュニケーションインタフェースSCI0とSCI6を使って受信しています。
RD(受信側)用にSCI0、TD(送信側)用にSCI6として2チャンネル必要ですが、送信はしないのでどちらも送信機能は使いません。
データ長やパリティの種類など、調歩同期方式で通常行う設定も当然可能です(一般仕様を参照)。ただ、対応できる通信速度は、内蔵のビットレートジェネレータ(BRR)を使って通信クロックを作成しているため、1200, 2400, 4800, 9600, 19200, 31250, 38400, 76800bps のどれかに限定されます。

9-2.I2C

1)割り込みとソフトウェアで受信

RX62NはI2Cインタフェース(RIIC)を2チャンネル持っています。しかし、自局アドレスと一致しないと受信しない、あるいは自動的にACKを送信するなど、通信モニタには向かない構造なので、RIICは使用せずに外部割込みを使ってソフトウェアで受信することにしました。
具体的には、SCLをIRQ2,SDAをIRQ3として、スタート/ストップコンディションの検知からデータのシリアル-パラレル変換まで、すべてソフトウェアで行います。
I2Cの詳しい説明は他の文献に譲るとして、下図にI2C通信を2つの割り込みで受信する仕組みを示します。図に示すように、SCLであるIRQ2は立ち上がりエッジで、SDAであるIRQ3は立ち上がりと立ち下りの両エッジで割り込みを発生させます。
IRQ3は常に有効で、スタート/ストップコンディションを監視します。IRQ2はスタートコンディションの検知で有効にし、ストップコンディションで禁止にします。
データの受信は、IRQ2割り込みが入るたびにSDAの状態を読み込んでデータの1ビットとし、これを9回繰り返すことで行われます。なお、その9ビット目はACKビットです。図にもありますが、ストップコンディション直前の1ビットは10ビット目に当たるため、IRQ2で捉えても破棄されます。
I2C通信受信の仕組み説明図

2)高速割り込みを使う

IRQ2もIRQ3も頻繁な割り込みなので高速な処理が必要ですが、IRQ3は両エッジのため、さらに頻度が上がります。そこで、IRQ3はRXマイコンが持つ高速割り込みというのを使ってみました。
高速割り込みは、割り込み時に退避するレジスタ(PC,PSW)を、スタックではなく専用レジスタ(BPC,BPSW)に退避するというものです。割り込み優先順位も最高位となり、若干の高速化が期待できます。
とは言え、すべてソフトウェアで受信しているため、スタンダードモード(100Kbps以下)の受信はできても、ファーストモード(400Kbps以下)は無理そうです。筆者が試したところでは、実力値は200Kbpsくらいでした。

9-3.SPI

1)SCIを使ってSPI受信

RX62NはSPIのインタフェース(RSPI)を2チャンネル持っています。しかし、通信モニタではその端子を他の目的に使用しており、SPIのモニタには使用できません。そこで、TTL,RS-232,RS-485と同じSCIインタフェースSCI0,SCI6を使って受信することにしました。
SCIはMSBから受信することも可能で、クロック同期モードで動作させればSPIとして使用することもできます。ただし、いくつかの制約を伴います。
その制約とは下記のような点です。

(1)モード3のみ対応します。
    SPIの詳しい説明は他の文献を参照いただくとして、SPIにはクロック(SCLK)の極性とデータ(MOSI,MISO)の位相の違いから、モード0~3の4種類が存在します。
    SCIのクロック同期モードはクロックの立ち上がりでデータを取り込むので、SPIではモード3ということになります。
(2)データが8ビット単位に限定されます。
    SPIは任意のビット長データを送受信できることになっていますが、SCIの一度の送受信データは8ビットなので、8ビット単位のデータでないとモニタできません。
(3)SCLKが4MHz以下に制限されます。
    SPIは、通信速度つまりSCLKの周波数に規定がないようです。一方、SCIのクロック同期モードはPCLK=48MHzの場合で8Mbpsまで可能なようです。
    しかし、この通信モニタは入力段にある電圧制限回路のため、約4Mbps以下でないと動作しません。と言っても、常に4Mbpsのモニタが可能なわけではありません、理由は以降の制約事項に関係します。
(4)SS(SEL:Slave Select)の変化からSCLKまでの時間に制限があります。
(5)通信頻度が高いとデータの取りこぼしが発生します。

(4)と(5)については以降で説明します。
このように制約が多いSPIモニタなので、速度が遅い通信あるいは実験的に遅くしてモニタする場合に使用すると割り切ることにします。

2)SSの変化からSCLKまでの時間制限

一般にSPI通信プログラムを作るというと、メモリやI/Oデバイスなど既存のスレーブを接続する、マスター側が多いのではないでしょうか。マスターは主導権を持っており自分の都合で通信できます。しかしスレーブは、マスターに従いSCLKに同期して高速に応えるという難しい面を持っています。
SPIのモニタは、送信こそないもののスレーブの機能に近いと言えます。
下図は通信モニタのSPI受信におけるSSの時間的条件を示したものです。図にあるように、SCLKはSSの変化に対してある程度の時間を必要とします。
SSはデバイスを選択する以外に通信の最初と最後を示すという意味を持っていますが、通信モニタにはSSがSCIの動作にハード的に連動するような仕組みがないため、割り込みを使ってプログラムでSCIやDMACの制御を行っています。つまり、図に示した時間はこのプログラム処理時間であり、この時間が確保されないとデータの取りこぼしが発生します。なお、図に示した時間は多少前後する場合があります。
SPI通信受信の時間制限説明図

3)DMAとリングバッファで取りこぼしを低減

下図にSPIの受信とデータを格納メモリにコピーする仕組みを示します。
できるだけ高速な通信に対応するため、SCIで受信したデータはDMAによってメモリに転送します。しかし、通常の受信と異なりDMAで転送しただけでは通信モニタとして使えません。
通信モニタとしてはMOSI,MISOのデータがペアになっている必要があり、またエンドレスで保存できなくてはなりません。さらに、トリガ検知も行う必要があります。
そこで下図(a)にあるように、受信データをDMA転送で一旦バッファに入れて、SSがディセーブルになった後にモニタデータ格納メモリへコピーします。トリガ検知のチェックやエンドレス保存の処理は、このコピーで行います。
格納メモリへのコピーは、基本的にSSディセーブル時間+次のデータの受信時間(DMA転送時間)内に行いますが、コピーには時間がかかるため(最低でも通常時で約2.7μS×バイト数,トリガ設定時で約4.9μS×バイト数)、通信が頻繁でSSディセーブル時間が短かったりすると、DMA転送ができたとしても格納メモリへのコピーが間に合わず取りこぼしが発生します。
コピーに時間がかかる以上、受信データを全部格納するのは不可能としてあきらめ、その中で取りこぼしを少なくする策を考えます。下図(b)は現在行っている方法で、DMA転送先のバッファを10本用意してリング状に順次に転送するようにします。転送が済んだものから順に格納メモリへコピーすれば、その10本の範囲内では取りこぼしなく受信できます。当然ですが、10回を超えて頻繁な受信があれば取りこぼします。
なお、SSイネーブルからディセーブルまでの間に受信できるデータは最大1500バイトです、通信頻度に関係なくそれ以上は正常に受信できません。

SPI通信受信のデータ格納の仕組み説明
(a)DMAと割り込みによるSPI受信のしくみ
~SSディセーブル期間が長い場合~

SPI通信受信の取りこぼし対策説明図
(b)DMAと割り込みによるSPI受信のしくみ
~SSディセーブル期間が短い場合~

10.USBポートでパソコンと接続

10-1.小型の液晶表示では物足りない

さすがに20桁×4行の液晶では見通しが悪く、通信内容も確認にくいと言わざるを得ません。そこで、モニタデータをパソコンに取り込んで、パソコン上で表示したり検索したりできるように、USB経由でモニタデータを読み出せるようにしました。
ただし、モニタ中のデータをリアルタイムで取り込むことはできません。できるのは、データ格納メモリに保存されているデータを、モニタ終了後に読み込むことです。また、ついでにUSB経由でモニタを開始/終了させる機能も入れてあります。
下図はUSBでパソコンと接続する方法を示しています。
USBでパソコンと接続する図

10-2.USBのPCDCドライバはサンプルを利用

通信モニタのUSBポートは仮想シリアルポート(Communication Device Class)として動作します。
そのドライバとして、ルネサス エレクトロニクスのアプリケーションノート「USB Peripheral Communications Device Class Driver (PCDC)」のサンプルソースを利用しています。
この通信ドライバのサンプルは、スタータキットで動作するように作られていますが、スタータキットに関わるスイッチやシリアルポートなどの部分を削除することで他の基板でも使用できます。
また、このドライバはリアルタイムOSを使用していない環境で動作できます。ただし、そのためにはリアルタイムOSに代わるスケジューラというのを常に呼び続ける必要があります。
通信モニタはリアルタイムOSを使っていないので、キー入力を待つ時間を使ってスケジューラを呼ぶようにしています。

10-3.モニタデータを読み込む専用ソフト

USB経由でモニタデータを読み込むには、パソコン側に専用のソフト(CMoniReader.exe)が必要です。そのソフトについては後ほど説明します。

■参考資料■
(1)RX62Nグループ、RX621グループ ユーザーズマニュアル ハードウェア編 :ルネサス エレクトロニクス
(2)RXファミリ ユーザーズマニュアル ソフトウェア編 :ルネサス エレクトロニクス
(3)RXファミリ C/C++コンパイラ、アセンブラ、最適化リンケージエディタコンパイラパッケージ ユーザーズマニュアル :ルネサス エレクトロニクス
(4)アプリケーションノート「Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC)」:ルネサス エレクトロニクス
(5)アプリケーションノート「Reneasas USB MCU and USB ASSP USB Basic Host and Peripheral firmware」:ルネサス エレクトロニクス

ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
■■■ 注 意 ■■■
1.ここに掲載された内容(写真,図,表などを含む)の、全てまたは一部を無断で使用しないでください。
2.ここで紹介した手法(構造や仕組み,回路,プログラムなどを含む)を使用したことにより、問題や不利益が発生したとしても一切関知しません。
3.ここで紹介したプログラム例は、正常なコンパイルおよび正常な動作を保証するものではありません。