(一)6410在linux下spi驱动及测试
还有2周就过年了,学校的事没有进展,弄点自己想弄滴,手头有一块RF2401的无线模块,之前是在arm9的裸机用了一下,现在想通过6410开发板来使用这个无线模块,因为无线模块式spi接口的,板子下/dev没有对应的设备,先将spi驱动编译进入内核
主机: ubuntu 2.6.32
开发板:友善之臂6410 2.6.38
Step1:打开arch/arm/mach_s3c64XX/mach_mini6410.c
增加如下代码:
static void cs_set_level(unsigned line_id, int lvl) {
gpio_direction_output(line_id, lvl);
};
static struct s3c64xx_spi_csinfo s3c64xx_spi0_csinfo = {
.fb_delay=100,
.line=S3C64XX_GPC(3),
.set_level=cs_set_level,
};
static struct spi_board_info s3c6410_spi0_board[] = {
[0] = {
.modalias = "spidev",
.bus_num= 0,
.chip_select= 0,
.irq =IRQ_SPI0,
.max_speed_hz= 500*1000,
.mode=SPI_MODE_0,
.controller_data=&s3c64xx_spi0_csinfo,
},
};
static struct s3c64xx_spi_csinfo s3c64xx_spi1_csinfo = {
.fb_delay=100,
.line=S3C64XX_GPC(7),
.set_level=cs_set_level,
};
static struct spi_board_info s3c6410_spi1_board[] = {
[0] = {
.modalias = "spidev",
.bus_num= 1,
.chip_select= 0,
.irq = IRQ_SPI1,
.max_speed_hz = 500*1000,
.mode=SPI_MODE_0,
.controller_data=&s3c64xx_spi1_csinfo,
},
};
找到platform_add_devices(mini6410_devices, ARRAY_SIZE(mini6410_devices));
&s3c64xx_device_spi0,
&s3c64xx_device_spi1,
加入到mini6410_devices结构中,就可以将设备s3c64xx-spi.0和s3c64xx-spi.1进行初始化,
在函数 mini6410_machine_init中添加:
s3c64xx_spi_set_info(0,0,2);
s3c64xx_spi_set_info(1,0,2);
spi_register_board_info(s3c6410_spi0_board, ARRAY_SIZE(s3c6410_spi0_board));
spi_register_board_info(s3c6410_spi1_board, ARRAY_SIZE(s3c6410_spi1_board));
mach_mini6410.c头文件里面添加头文件
#include <linux/spi/spidev.h>
#include <linux/spi/spi.h>
#include <plat/s3c64xx-spi.h>
Step2:
在此目录中找到:Makefile,打开
修改成
# device support
obj-y += dev-uart.o
obj-y += dev-audio.o
obj-y += dev-spi.o
现在成功编译make zImage
给板子重新刷上系统,就可以在dev下看到spidev0.0,spidev1.0了
Step3:测试spi口
使用Linux源码包下的/home/src/linux-2.6.32.2/Documentation/spi/spidev_test.c 程序来检测
root@seraph-desktop:/home/seraph/spitest# cp /usr/src/linux-2.6.38/Documentation/spi/spidev_test.c /home/seraph/spitest/
root@seraph-desktop:/home/seraph/spitest# ls
spidev_test.c
root@seraph-desktop:/home/seraph/spitest# gedit spidev_test.c
root@seraph-desktop:/home/seraph/spitest# arm-linux-gcc spidev_test.c -o spi
将编译好的程序拷至u盘,插在板子上
用一根跳线将SCON接口的13针脚和14针脚连接
[root@FriendlyARM ]# cd udisk
[root@FriendlyARM /udisk]# cd spitest/
[root@FriendlyARM spitest]# ./spi
spi mode: 0
bits per word: 8
max speed: 496268 Hz (496 KHz)
FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D
ok 友善之臂6410在linux下spi驱动及测试成功!
感谢网上的各位linuxer的文章帮我解决很多问题!