Avance.Lab

技術紹介

マイコンによる自動生成ツールの落とし穴

公開日:2023.06.23 更新日:2023.06.23

tag: 組み込み

こんにちは、ソラです。

最近のマイコンは小さくなって、やれることが多くなってきていますね。
技術の進歩はすごいですね。
その分、マニュアルのページ数も膨大になっています。
全てを読んで理解する人もいると思いますが、私には無理ですね。

はじめに

さて、今回は、マイコンの初期設定を楽にしてくれるツールと その落とし穴について紹介します。
クロックを設定したり、機能を有効にしたり、ポートの設定をしたりと レジスタを一つ一つ設定していくのは大変です。
ただ最近では、その初期設定を手助けしてくれるものがあります。
ルネサスのスマート・コンフィグレータです。
まずは簡単にこちらの機能について紹介したいと思います。

スマートコンフィグレータの設定

今回は、I2C通信とCAN通信ができるように、スマートコンフィグレータで マイコンの初期設定をします。
I2C通信はすべてスマートコンフィグレータで設定します。
CAN通信は、ポート設定部分しかサポートされていませんので、そこだけ設定します。

GUIで行えるので、わかりやすいです。

CANポート設定
I2Cポート設定
I2C通信機能設定

設定したいものを選択し、コード生成ボタンでソースコードが生成されます。
※詳細の使い方などは、ルネサスのサイトを確認してください。

イメージ図

スマートコンフィグレータの設定、出力イメージは以下です。

出力コード

以下は実際に出力されるコードです。
必要な処理(CAN処理、I2C処理)を追加していきます。

落とし穴1つ目

このまま実行するとCANが動きません。
生成されたR_Pins_Create()がありますが、どこからも呼ばれていません。
そのため、CANのポート設定ができていませんでした。

そこで、以下のように修正します。

CANが動作するようになりました。

落とし穴2つ目

今度はI2Cの通信がうまくいきません。
R_Pins_Create()の中には、I2Cのポート設定も含まれています。
R_Pins_Create()のI2Cのポート設定が正しい場合は、問題なく動作します。 
しかし、今回生成したR_Pins_Create()では、意図した設定となっていませんでした。 
R_Pins_Create()に出力されるI2Cのポート設定は、ポートを有効にする設定のみ。
I2C機能で出力される設定は、ポートの有効に対してどのように通信するかの設定も含む。
そのため、I2Cのポートの設定が有効にするだけの状態に上書きされてしまい、おかしくなってしまったのです。

解決するためには、 後から正しい設定で上書きされるようにR_Pins_Create()を先に呼んでください。

または、R_Pins_Create()の必要な設定(今回はCANの設定)のみ、使用するように変更してください。
※予期せぬエラーを回避するためには、必要なものだけをコピーして使用する、こちらの方法を推奨します。

これでようやく、CANとI2Cの両方の機能が使えるようになりました。

あとがき

私は、I2Cの通信が動かない理由がなかなか分からず、解決までに時間が掛かってしまいました。
同じように、はまらないように気を付けてください。
自動で作成してくれるのは、ありがたいですが、
最終的には、生成されたものとマニュアルを見て確認する必要があるのではないでしょうか。

ソラ

組み込み系の開発が多いですね。

スマートフォンのアプリなど作ってみたいですね。

関連記事