Armadilloフォーラム

Armadillo-800 EVA 外部メモリ空間アクセスについて

shimamura

2016年3月8日 9時32分

お世話になります。

Armadillo-800 EVAでマイコンの外部メモリ空間の検証を行っています。

テスト環境としては、EVAボードのCON2にメモリ空間のバス、制御信号が
ありますので、エリア5A(CS5A)にSRAM(バス幅:8ビット)を接続しています。

Hermit-At3の初期処理に、エリア5Aがアクセスできるようにマイコンのレジスタ設定を
追加しました。
①エリア5のバスは8ビットに設定
②ポート105をファンクション1(CS5A)に設定
③ポート115をファンクション1(RD)に設定
④ポート175をファンクション1(A0)に設定
※その他のピンファクションはデフォルトでOK。

上記の状態で、Hermit-At3を実行している状態(カーネル起動前)では、外部メモリに
正常にアクセス出来ることを確認しました。

しかし、カーネル実行後は、外部メモリに正常にアクセスすることが出来ませんでした。
調査したところ、カーネル実行後は、BSC関連のレジスタが全て「0」にクリアされていました。
(カーネル実行後に、上記①~④を再設定しても外部メモリにはアクセス出来ませんでしたので
他にもレジスタの状態が変わったしまったところがあると思われます。)

カーネル起動時にレジスタ状態を引き継ぐ(変更しない)方法を教えてください。

コメント

GPIO に設定されているようですね。

PORTの設定をするには、linux-3.4-at/arch/arm/mach-shmobile/board-armadillo800eva.c
eva_init() で、他のポートのように、設定する必要があります。

linux-3.4-at/arch/arm/mach-shmobile/pfc-r8a7740.c で gpioの設定をするための
pinmux_dataに、使っているポートが入っています。ここに入っているポートは、
他の機能として選択されなければ、GPIOに設定されます。

お世話になります。

やっと時間が取れて、再びArmadillo-800 EVAでマイコンの外部メモリ空間のアクセスに
チャレンジしています。

引き続き、テスト環境としては、EVAボードのCON2にメモリ空間のバス、制御信号が
ありますので、エリア5A(CS5A)にSRAM(バス幅:8ビット)を接続しています。

eva_init() で、BSC関連のレジスタや、ポート設定(バス、制御信号の設定)を行いましたが
SRAMにはアクセス出来ませんでした。

カーネル起動前はSRAMに正常にアクセス出来るので、カーネル起動時にレジスタが
変わってしまい、設定し直さなければならないレジスタがBSC関連、GPIO関連以外に
あると思うのですが・・・

アドバイスお願いします。

カーネル起動前にアクセスできるのであれば、MMUの設定ですね。
SRAMの空間は、どこにマップしていますか?

固定アドレスでマップしなくても良いのであれば、ioremap()が使えます。
Linux Device Driver の Remapping Kernel Virtual Addresses などが詳しいです。
https://static.lwn.net/images/pdf/LDD3/ch15.pdf

BSCの設定がカーネル起動後にクリアされてしまいます。
MMU関連のレジスタも変わっているかも知れません。

SRAMは32kbyteで、CS5A(0x14000000~0x15FFFFFF)の空間の先頭からマッピングしています。

この外部メモリでデータのバックアップを行うテストをしたいので、固定のアドレスにマップする必要があります。

アドバイス宜しくお願いします。

コンフィギュレーションはデフォルトのarmadillo800eva_android_defconfigを適用しています。

armadillo800eva_android_defconfigの変更で、CS5A(0x14000000~0x15FFFFFF)の空間が使えるようにならないでしょうか?

アドバイス宜しくお願いします。