[Armadillo:05590] Re: armadillo-420 でのSPI使用方法について

Takenoshita Koyo email@hidden
2010年 8月 6日 (金) 15:19:32 JST


竹之下です。

email@hidden さんは書きました:
> armadillo-420でSPIをユーザランドで使用したいのですが、デバイ
> スドライバがうまくインストールできず悩んでいます。
> SPIの確認の為、linux-2.6.26-at/Documentation/spi/spidev_test
> .cを動作させたいと考えています。
> カーネルのバージョンはlinux-2.626-at9を使用しています。

> デバイスドライバが組み込まれていないのだと思うのですが、カー
> ネルコンフィグの項目に不足や間違いがあるのでしょうか。

Armadillo-400で、標準で有効になっていないデバイスドライバを使用するためには、
以下の手順でカーネルコンフィギュレーションをおこなう必要があります。

1. ボードオプションによりどのピンに機能を割り当てるか選択する
2. ホスト(マスター)のデバイスドライバを有効にする
3. 必要であれば、スレーブのデバイスドライバを有効にする
4. 必要であれば、arch/arm/mach-mx25/armadillo400.cにデバイス情報を追記する

今回、やりたいことは、spidevを使えるようにしたいとのことです。
また、CON9には、SPI1とSPI3の2系統のSPI信号を出すことができますが、
今回はSPI1を使用するという前提で話を進めます。

この場合、手順は以下のようになります。
1. ボードオプションでCON9のSPI1を選択する
2. MXC SPI Masterデバイスドライバを有効にする
3. スレーブのデバイスドライバとして、spidevを有効にする
4. arch/arm/mach-mx25/armadillo400.cのarmadillo400_spi1_board_infoに
   デバイス情報を追記する

より具体的には、以下のようになります。

1. ボードオプションによりCON9のSPI1を選択する

linux-2.6.26-at9のmake menuコンフィギュレーションで、以下のように設定してください。
UART3のチェックを外さないと、SPIの選択肢が表示されません。

Linux Kernel Configuration
  System Type  --->
    Freescale MXC Implementations  --->
      MX25 Options  --->
        Armadillo-400 Board options  --->
          [ ] Enable UART3 at CON9           #チェックを外します
          [*] Enable SPI1 at CON9            #チェックを入れます
          [*]   Enable SPI1_SS0 at CON9_25   #SS信号として使いたい場合は、チェックを入れます
          [*]   Enable SPI1_SS1 at CON9_11   #SS信号として使いたい場合は、チェックを入れます

この時、SPI信号は以下のピンに割り当てられます。helpを参照してください。
SS信号は、必要な分だけ選択できるようになっています。

CON9_3 : CSPI1_MOSI
CON9_5 : CSPI1_MISO
CON9_13: CSPI1_SCLK
CON9_26: CSPI1_RDY

CON9_25: CPI1_SS0
CON9_11: CPI1_SS1


--- 脱線 ---
CON9のSPI3を有効にするには、以下のように設定します。

          [ ] Enable UART5 at CON9           #チェックを外します
          [*] Enable SPI3 at CON9            #チェックを入れます
          [*]   Enable SPI3_SS0 at CON9_16   #SS信号として使いたい場合は、チェックを入れます
          [*]   Enable SPI3_SS1 at CON9_18   #SS信号として使いたい場合は、チェックを入れます
          [*]   Enable SPI3_SS2 at CON9_15   #SS信号として使いたい場合は、チェックを入れます
          [*]   Enable SPI3_SS3 at CON9_17   #SS信号として使いたい場合は、チェックを入れます

この時、各信号は以下のピンに割り当てられます。

CON9_4: CSPI3_MOSI
CON9_6: CSPI3_MISO
CON9_12: CSPI3_SCLK
CON9_14: CSPI3_RDY

CON9_16: CPI3_SS0
CON9_18: CPI3_SS1
CON9_15: CPI3_SS2
CON9_17: CPI3_SS3
--- 脱線終わり ---

2. MXC SPI Masterデバイスドライバを有効にする

linux-2.6.26-at9のmake menuコンフィギュレーションで、以下のように設定してください。

Linux Kernel Configuration
  Device Drivers  --->
    [*] SPI support  --->                       #チェックを入れます
      <*>   MXC CSPI controller as SPI Master   #チェックを入れます(Mではなく、*にする)

3. スレーブのデバイスドライバとして、spidevを有効にする
 
linux-2.6.26-at9のmake menuコンフィギュレーションで、以下のように設定してください。

Linux Kernel Configuration
  Device Drivers  --->
    [*] SPI support  --->
     <*>   User mode SPI device driver support  #チェックを入れます(Mではなく、*にする)

4. arch/arm/mach-mx25/armadillo400.cのarmadillo400_spi1_board_infoに
   デバイス情報を追記する

linux-2.6.26-at9arch/arm/mach-mx25/armadillo400.cを以下のように修正してください。

--- a/arch/arm/mach-mx25/armadillo400.c.org
+++ b/arch/arm/mach-mx25/armadillo400.c
@@ -553,6 +553,12 @@ static struct mxc_spi_master armadillo400_spi1_data = {
 };
 
 static struct spi_board_info armadillo400_spi1_board_info[] __initdata = {
+       {
+               .modalias = "spidev",
+               .max_speed_hz = 1000000,
+               .bus_num = 1,
+               .chip_select = 0,
+       },
 };
 #endif

SPI3を使うときはarmadillo400_spi3_board_infoに追記しbus_num=3となります。
また、SS1を使うときはchip_select=1となります。

---
以上で、カーネルのコンフィギュレーションは完了です。
カーネルイメージを作成して、Armadilloに書き込んでください。

修正後のカーネルで起動すると、/dev/spidev1.0 というデバイスファイルが
作成されます。

1はbus_num、0はchip_selectの番号です。

---
spidev_testを使う場合は、このデバイスファイルを指定して実行します。

# ./spidev_test --device /dev/spidev1.0 
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)

00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 

デバイスをつなげていないので、何も反応していません。。。

デバイスを適切に接続すれば、以上の手順で、ユーザーランドからSPI
を読み書きできるようになると思います。

以上、長くなりましたが、ご参考になれば。

-- 
Koyo Takenoshita




armadillo メーリングリストの案内