自動車向け通信規格のCANは、自動車だけでなく、輸送用機械、工場、工作機械、ロボットなど幅広い分野で利用がはじまっています。SPRESENSEでは、NextStep社製の 「Sony Spresense 用 CAN AddOnボード」 を利用することにより、SPRESENSEをCANネットワークに参加させることができます。実際、SPRESENSEの開発環境には「Arduino IDE」と「SPRESENSE SDK」がありますが、Arduino IDEでの開発方法は下記の記事が最も参考になります。
今回入手したボード
参考記事|Arduino IDEでSPRESENSEをCANネットワークへ参加させる
本記事の目的
SPRESENSE SDK上でCANをアクティベートすることです。
1回でまとめることが難しいので数回の更新でアウトプットしたいと思います。
SPRESENSE SDKのCAN対応状況
最初の朗報は、SPRESENSE SDKはNuttXを核としたソフトウエアを生成できる開発環境であり、そのリアルタイムOSである「NuttX」はCANのデバイスMCP2515のドライバを同梱していることです。しかしこれは完全な朗報ではありません(これだけ聞くとコンパイルスイッチを切り替えるだけで使えるように錯覚します)。NuttXに同梱されたデバイスドライバは 「ボード名_bringup.c」 というファイル内で初期化が呼び出されて初めて機能します。SPRESENSEの場合は cxd56_bringup.c ですが、ここにMCP2515の初期化コードは含まれていません。
デバイスドライバを有効化するコンパイルスイッチ 「CONFIG_CAN_MCP2515」 を検索すると、stm32f103-minimun の stm32_bringup.cが求めているコードのようですので、この実装を"cxd56_bringup.c"を移植するとよさそうです。
"/dev/can0" 提供後
無事移植ができると、NuttXのデバイスファイル "/dev/can0" として、CANを利用できるようになるでしょう。このときの利用方法を知る方法には、「CANdriver APImigration from Classical CAN to CAN FD」が適当です。また、終端抵抗については「CAN信号の終端処理を適切に行う」が参考になりました。
次回の更新予定
それでは次回は、
stm32を参考にCANの初期化に必要な実装を洗い出していきたいと思います。