[Armadillo:08905] Armadillo-460でSPI使用設定について
Yamamoto
email@hidden
2013年 6月 20日 (木) 13:27:03 JST
Yamamotoです。
Armadillo-460でSPI通信をする必要がありmenuconfigで設定したのですが、起動時にエラー
になっているようで使用できません。
[Armadillo:05589] armadillo-420 でのSPI使用方法について
を参考にやってみましたが
--------------------------------------------------------------------------------
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の番号です。
--------------------------------------------------------------------------------
カーネルで起動すると、/dev/spidev1.0 というデバイスファイル <-- 作成されず
起動時の内容
--------------------------------------------------------------------------------
Hermit-At v2.1.4 (armadillo4x0) compiled at 20:49:45, Feb 23 2012
Uncompressing kernel.......................................................................................................done.
Uncompressing ramdisk..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................done.
Doing console=ttymxc3
Linux version 2.6.26-at15 (2.6.26) (email@hidden) (gcc version 4.3.2 (Debian 4.3.2-1.1) ) #13 PREEMPT Thu Jun 20 11:28:22 JST 2013
CPU: ARM926EJ-S [41069264] revision 4 (ARMv5TEJ), cr=00053177
Machine: Armadillo-460
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets
CPU0: D cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512
Kernel command line: console=ttymxc3
MXC IRQ initialized
PID hash table entries: 512 (order: 9, 2048 bytes)
MXC GPT timer initialized, rate = 133000000
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 108612KB available (3020K code, 221K data, 128K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 480 bytes
NET: Registered protocol family 16
MXC WDOG1 Enabled
CPU is i.MX25 Revision 1.2
Clock input source is 24000000
MXC GPIO hardware
GPIO-56 autorequested
Initializing CPLD: v2
Using SDMA I.API
MXC DMA API initialized
SCSI subsystem initialized
mxc_spi: probe of mxc_spi.0 failed with error -22 <== エラーになっている
CSPI: mxc_spi-2 probed
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
MXC I2C driver
MXC I2C driver
MXC I2C driver
MC34704 regulator successfully probed
mc34704 0-0054: Loaded
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
NET: Registered protocol family 1
checking if image is initramfs...it isn't (bad gzip magic numbers); looks like an initrd
Freeing initrd memory: 17840K
usb: Host 2 host (serial) registered
usb: DR host (utmi) registered
msgmni has been set to 247
io scheduler noop registered
io scheduler cfq registered (default)
mx2fb: Unable to set clock to 0
Console: switching to colour frame buffer device 60x17
mxc_sdc_fb mxc_sdc_fb.0: fb0: DISP0 BG fb device registered successfully.
mxc_sdc_fb mxc_sdc_fb.0: fb1: DISP0 FG fb device registered successfully.
Serial: MXC Internal UART driver
mxcintuart.1: ttymxc1 at MMIO 0x43f94000 (irq = 32) is a Freescale MXC
mxcintuart.2: ttymxc2 at MMIO 0x5000c000 (irq = 18) is a Freescale MXC
mxcintuart.3: ttymxc3 at MMIO 0x50008000 (irq = 5) is a Freescale MXC
console [ttymxc3] enabled
mxcintuart.4: ttymxc4 at MMIO 0x5002c000 (irq = 40) is a Freescale MXC
brd: module loaded
loop: module loaded
Freescale FlexCAN Driver
FEC Ethernet Driver
PPP generic driver version 2.4.2
Linux video capture interface: v2.00
usbcore: registered new interface driver uvcvideo
USB Video Class driver (v0.1.0)
Driver 'sd' needs updating - please use bus_type methods
armadillo-nor: Found 1 x16 devices at 0x0 in 16-bit bank
Intel/Sharp Extended Query Table at 0x010A
Intel/Sharp Extended Query Table at 0x010A
Intel/Sharp Extended Query Table at 0x010A
Intel/Sharp Extended Query Table at 0x010A
Intel/Sharp Extended Query Table at 0x010A
Using buffer write method
Using auto-unlock on power-up/resume
cfi_cmdset_0001: Erase suspend on write enabled
armadillo-nor: use default partitions(4)
Creating 4 MTD partitions on "armadillo-nor":
0x00000000-0x00020000 : "nor.bootloader"
0x00020000-0x00220000 : "nor.kernel"
0x00220000-0x01fe0000 : "nor.userland"
0x01fe0000-0x02000000 : "nor.config"
fsl-ehci fsl-ehci.0: Freescale On-Chip EHCI Host Controller
fsl-ehci fsl-ehci.0: new USB bus registered, assigned bus number 1
fsl-ehci fsl-ehci.0: irq 35, io mem 0x53ff4400
fsl-ehci fsl-ehci.0: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
fsl-ehci fsl-ehci.1: Freescale On-Chip EHCI Host Controller
fsl-ehci fsl-ehci.1: new USB bus registered, assigned bus number 2
fsl-ehci fsl-ehci.1: irq 37, io mem 0x53ff4000
fsl-ehci fsl-ehci.1: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
input: gpio-keys as /devices/platform/gpio-keys.0/input/input0
i2c /dev entries driver
rtc-s35390a 3-0030: rtc core: registered rtc-s35390a as rtc0
i2c-gpio i2c-gpio.3: using pins 128 (SDA) and 129 (SCL, no clock stretching)
mxsdhci: MXC Secure Digital Host Controller Interface driver
mxsdhci: MXC SDHCI Controller Driver.
mmc0: SDHCI detect irq 159 irq 9 INTERNAL DMA
Registered led device: red
Registered led device: green
Registered led device: yellow
usbcore: registered new interface driver usbhid
usbhid: v2.6:USB HID core driver
i.MX ADC at 0x50030000 irq 46
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP cubic registered
NET: Registered protocol family 17
NET: Registered protocol family 15
can: controller area network core (rev 20071116 abi 8)
NET: Registered protocol family 29
can: raw protocol (rev 20071116)
can: broadcast manager protocol (rev 20080415)
Static Power Management for Freescale i.MX25
input: imx_adc_ts as /devices/virtual/input/input1
i.MX ADC input touchscreen loaded.
rtc-s35390a 3-0030: setting system clock to 2013-06-20 04:09:13 UTC (1371701353)
RAMDISK: ext2 filesystem found at block 0
RAMDISK: Loading 17840KiB [1 disk] into ram disk... done.
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 128K
mmc0: new high speed SDHC card at address 59b4
mmcblk0: mmc0:59b4 SDC 3855360KiB
mmcblk0: p1
init started: BusyBox v1.00 (2012.09.19-05:03+0000) multi-call binary
Starting fsck for root filesystem.
fsck 1.25 (20-Sep-2001)
ext2fs_check_if_mount: No such file or directory while determining whether /dev/ram0 is mounted.
/dev/ram0: clean, 966/1176 files, 16207/17840 blocks
Checking root filesystem: done
Remounting root rw: done
Mounting proc: done
Mounting usbfs: done
Mounting sysfs: done
Cleaning up system: done
Running local start scripts.
Starting udevd: done
Loading /etc/config: done
Changing file permissions: done
Configure /home/ftp: done
Starting syslogd: done
Starting klogd: done
Starting basic firewall: done
Setting hostname: done
Configuring network interfaces: fec: PHY @ 0x0, ID 0x0007c0f1 -- LAN8720
eth0: link down
done
Starting inetd: done
Setting at-cgi: done
Starting lighttpd: doneeth0: link up, 100Mbps, full-duplex
Creating avahi.services: done
Starting avahi.daemon: done
Mounting ramfs /home/ftp/pub: done
--------------------------------------------------------------------------------
なにの設定が悪いのか、チェックすべきところを教えていただけませんでしょうか?
armadillo メーリングリストの案内