注目の投稿

技術Note一覧

このブログのメインコンテンツである技術Noteの一覧

2017/08/29

I2C独立駆動

I2C通信がかなり遅い(100kHz) のでI2Cデバイスとのデータ通信もハードウェアにバックグラウンドでやらせて、Niosは値を必要なときに引っ張ってくるだけ、という設計にしたい(つまりメイン処理のCPUを介さずにI2Cコントロールをしたい)
→結局Niosを2つ積んでマルチコアシステムを採用した.

I2C独立システム化の潰えた計画達
1.altera_avalon_I2C_Master + DMAC
マニュアル上ではFIFO内蔵+Avalon_STインターフェース(DMAインターフェース)が提供されているようだ.これは熱い.

→そもそもalteraのI2CモジュールからI2C波形が出力できなかった.
TFR_CMDレジスタをIOWRで直接叩いても反応なし.
仕様理解不足か?

driverとして自動でリンクされるCソースは内部向け関数と外部向け関数が混在していてとても分かりにくくて苦行.
とりあえず i2c_open()みたいな関数に対して”/dev/i2c” (i2cはコアの名前.デフォではi2c_0になってるやつ)を渡せばBase Address等が格納された構造体が帰ってくる.構造体を適宜渡しながらライブラリを叩けば良さそう.が,やはりI2C波形は出なかった.

参考文献が少ない(というかほぼ無い)ので諦めた

2.  I2C_Master(opencore.org) + 自作のavalon_MMslave to avalon_MMmaster
opencoresのI2Cモジュールはかなりシンプルで分かりやすい.動作確認OK.
あとはメインCPUを介さずにI2C通信し続ける部分が必要.
avalon_MMインターフェースしか提供されていないので,このモジュールにavalon_MMmasterとしてコマンドを送り続けるモジュールが必要.
→そんな気力はない.