日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

古いマイコンでは工夫していた

僕がこれまで仕事で使ってきたマイコンは全て同じシリーズなのだが、

古いシリーズでは全く違うマイコンを使っている。メーカーも違う。

古いシリーズでも一部は最新シリーズと同じタイプのマイコンに乗り換えている。

事情はいろいろあるけど、僕が一番問題だと思っているのは開発環境が腐っていること。もはやプログラムに手が付けられる環境ではない。

あと、使っているマイコンのチップが供給停止になるという話もあって、今のまま生産継続することすら難しい。

一部製品で最新シリーズと同じタイプのマイコンの乗り換えた背景にはそういう事情もある。


そんなこんなで、既存のマイコンでペリフェラルのどんな機能を使っているか調査をしていた。

今まで見てる限りで一番難解だったのが、外付けADコンバータとの通信だ。

精度良くAD変換する必要があって、外付けのADコンバータを使っている。

AD変換結果はクロック同期のシリアル通信(SPI)で読み出す。

パッと見て、なんでこんなに複雑な操作をしているのかよくわからなかったのだが、

このマイコンのシリアル通信ペリフェラルの機能上の制約で、複雑な操作が強いられているようだ。


まず、おかしいのがSPIのクロック端子がGPIO設定になっていること。

SPI通信を開始する前にGPIOで動かしてから、クロック出力に切り替えているらしい。

そして、受信データをメモリに転送するのにDMA(Direct Memory Access)を使っているのだが、

このDMAってたった2バイトを転送するためだけに使っているようだ。

しかも、なぜか送信先アドレスをデクリメントするという設定になっている。


回路図とにらめっこしたり、実機を触ってみたりした結果、わかったのはいろいろな制約上こうならざるを得なかったということだ。

このADコンバータのSPI通信の仕様が、ことごとくこのマイコンに合っていない。

マイコンとADコンバータでSPIクロックの仕様が合わないようで、それを埋めるためになんか工夫をしていたようだ。

16bitなので2バイト分のデータが得られるのだが、このペリフェラルには受信FIFOが付いていない。

そのため、たった2バイトのデータを転送するだけでもDMAを使うのが合理的だったらしい。

送信先アドレスをデクリメントするのは、このマイコンがビックエンディアンだから。

LSBから順番に受信するので、LSBを含むバイトが一番最後で、そこから順番に前に格納していくのだ。


なるほどと思ったのだが、受信したデータを見てみると、なんかおかしい。

ADコンバータのデータシートを見て気付いたのだが、ADコンバータはMSBから順番に送信する仕様になっていた。

シリアル通信はLSBから順番に送るのが一般的で、このマイコンは受信したデータをLSBから順番に格納する。

さらに詳しくソースコードを見てみると、受信したデータのMSBとLSBの順番を入れ替える処理が入っていた。

すなわち、次のような手順でAD変換値を取得している。

  1. ADコンバータは bit15,14,…,8,7,…,1,0 の順にデータを送る
  2. ペリフェラルは受信したデータを{bit8,9…,15},{bit0,1,…,7}の順にバッファに格納する
  3. DMAによりメモリ上に {bit0,1,…,7},{bit8,9…,15} の順に格納される
  4. プロセッサーはメモリ上に格納されたデータを {bit0,1…,15} として解釈する
  5. MSBとLSBの順番を入れ替えて {bit15,14,…,0} が得られる


これ、最新シリーズで使っているマイコンだと、ほとんど何も考えなくても使えるはず。

クロックだが、LoアクティブとHiアクティブ、立ち上がり・立ち下がり同期を自由に選べる。

MSBファーストとLSBファーストも自由に選べるし、FIFOもあるから2バイト程度ならばDMAもいらない。

リトルエンディアンのプロセッサーなので、バイト順だけは考慮が必要だが。


これに加えてADコンバータ周りの回路構成が難解で、

設計資料もすぐに見あたらず、回路図をよく解読する必要があった。

最終的には得られたAD値が設計値と一致することが確認出来たのでよかったのだが、なかなか苦労した。

こうして、このマイコンでの正しい通信手順が確認出来たので、今後の移植に役立てばいいな。

いろいろと暗雲が立ちこめるプロジェクトではあるんだけど、どうやって生産継続するかというのは悩み所ではある。

旧シリーズだからといって投げ捨てるのはいろいろと難しい事情があるんですよね。

どこら辺が落としどころか。いくつかの選択肢の中から検討するってことでしょうね。


Author : Hidemaro
Date : 2018/12/18(Tue) 23:06
電気・数学・物理 | Comment | trackback (0)

Tools