tomi_vhi
2023年9月25日 14時28分
渡邊です。
高速拡張バスモードの設定を行って、外部バスに出力しようと思っております。
どのようにすれば出力できますでしょうか?
バスタイミングの設定は下記を参考にして設定
https://armadillo.atmark-techno.com/howto/a460-lan9118
因みに下記のような方法で書き込むと、Segmentation fault になります。
・定義
#define sram_off *(( volatile unsigned short *)0xB2000000) /* CS3 Offset */
・プログラム
sram_off = 0x55;
よろしくお願いいたします。
コメント
tomi_vhi
渡邊です
>ダイレクトCPUバスモードで利用するアドレス空間は、Linuxカーネルでmapする必要があります。
>同様の作業は行っていますか?
これについては、mapする必要があることを理解していなかったため行っておりませんでした。
linux-a460-lan9118.patch のコードの一部を適用する必要があるということと理解しました。
具体的にはどのようにすれば良いのでしょうか?
パッチの適用のされ方がわからないので、間違ったことを言っているかもしれませんが、
何となくざっと見た感じで解釈すると、400行目から3つが書かれている?部分のうしろ、つまり
下記の先頭の+を抜いたコードを「armadillo460.c」のソースファイルの最後の部分に追加するということでしょうか?
この方法で合っていますでしょうか? これ以外に追加するものが必要でしょうか?
(空白2行) #include <linux/platform_device.h> #include <linux/smsc911x.h> static struct resource ext_smsc9118_resources[] = { ・ ・ ・ return 0; } arch_initcall(armadillo460_with_smsc9118_init);
よろしくお願いいたします。
at_mizo
溝渕です。
> 具体的にはどのようにすれば良いのでしょうか?
ご参照のHowtoに記載の通り、
https://armadillo.atmark-techno.com/howto/a460-lan9118
次のようにパッチを適用できます。
[atde ~/linux-2.6.26-at]$ patch -p1 < ../linux-a460-lan9118.patch
割り込みやアドレスの範囲が問題無ければそのまま使えると思います。
> 何となくざっと見た感じで解釈すると、400行目から3つが書かれている?部分のうしろ、つまり
> 下記の先頭の+を抜いたコードを「armadillo460.c」のソースファイルの最後の部分に追加するということでしょうか?
そうですね。上記解釈で合っています。
> この方法で合っていますでしょうか? これ以外に追加するものが必要でしょうか?
アドレス空間をマップするだけであれば、これで十分です。
tomi_vhi
tomi_vhi
渡邊です。
下記に書かれている仮想アドレス「0xF2000000」でも試しましたが、「Segmentation fault」の状態のままです。
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_sof…
よろしくお願いいたします。
at_mizo
溝渕です。
> linux-a460-lan9118.patch をそのまま当てましたが、「Segmentation fault」の状態のままです。
今更ですみませんが、Armadillo-460はMMUを利用しているので、次のように物理メモリアクセスを行う事はできません。
> ・定義
> #define sram_off *(( volatile unsigned short *)0xB2000000) /* CS3 Offset */
> ・プログラム
> sram_off = 0x55;
https://armadillo.atmark-techno.com/howto/accessing-any-address
を参考に、"/dev/mem"経由でアクセスする事になります。
まずは、上記Howtoで紹介されているdevmem2をそのまま利用してCS3空間にアクセスしてみてください。
tomi_vhi
渡邊です。
./devmem2 0xb2000000 h を実行すると、CS3 に Low 波形が出てきました。
./devmem2 0xb4000000 h を実行すると、CS4 に Low 波形が出てきました。
CS信号だけ見たのですが、問題なく動いているように思えます。
(CS信号のLow継続時間は約60nsでした。サイクル時間67.5nsなので、妥当な時間だと思います)
devmem2を参考に作っていけばよいということでしょうか?
(Windowsのファイルオープンのように、”/dev/mem/”をオープンして読み書きする感じ?)
よろしくお願いいたします。
at_mizo
溝渕です。
> devmem2を参考に作っていけばよいということでしょうか?
そうです。
> (Windowsのファイルオープンのように、”/dev/mem/”をオープンして読み書きする感じ?)
"/dev/mem"はデバイスファイルと呼ばれます。Linux(UNIX)の設計思想の1つに"Everything is a file"という考え方があり、デバイスファイルへの読み書きによってデバイス(今回の場合は各チップセレクトに該当するアドレス空間)アクセスを行う事ができます。
tomi_vhi
at_mizo
2023年9月25日 14時46分
溝渕です。
> 高速拡張バスモードの設定を行って、外部バスに出力しようと思っております。
> どのようにすれば出力できますでしょうか?
>
> バスタイミングの設定は下記を参考にして設定
> https://armadillo.atmark-techno.com/howto/a460-lan9118
ダイレクトCPUバスモードで利用するアドレス空間は、Linuxカーネルでmapする必要があります。
ご参照のHowtoでは、パッチ(linux-a460-lan9118.patch)内の"arch/arm/mach-mx25/armadillo460.c"への差分でmapしています。
同様の作業は行っていますか?