micro2440安装SPI0和SPI1的驱动
我使用的是友善之臂09年2月光盘里的2.6.29内核。是参考了很多资料经过几天才搞定的,最后可以在/dev里看到spidev0.0 和spidev1.0两个节点,并且用micro2440板的用户按键接口测试spidev1.0的波形正确
在arch/arm/mach-s3c2440/mach-mini2440.c中:
//1:加入头文件:
#include <../mach-s3c2410/include/spi.h>
#include <linux/spi/spidev.h>
//2:加入
static struct spi_board_info s3c2410_spi0_board[] = {
[0] = {
.modalias = "spidev",
.bus_num= 0,
.chip_select= 0, //必须小于s3c2410_spi0_platdata.num_cs
.irq = IRQ_EINT9,
.max_speed_hz= 500*1000,
},
};
static struct s3c2410_spi_info s3c2410_spi0_platdata = {
.pin_cs = S3C2410_GPG2,//此处根据内核不同略有不同,在2.6.32
.num_cs = 1,/*shw:不能等于0,代表可以选择的slave数量 //#include <mach/regs-gpio.h>有不同定义*/
.bus_num = 0,
.gpio_setup=s2c24XX_spi_gpiocfg_bus0_gpe11_12_13,
};
static struct spi_board_info s3c2410_spi1_board[] = {
[0] = {
.modalias = "spidev",
.bus_num= 1,//代表使用芯片的第二个spi模块
.chip_select= 0, //必须小于s3c2410_spi0_platdata.num_cs
.irq = IRQ_EINT2,
.max_speed_hz = 500*1000,
},
};
static struct s3c2410_spi_info s3c2410_spi0_platdata = {
.pin_cs = S3C2410_GPG3,//此处根据内核不同略有不同,在2.6.32
.num_cs = 1,/*不能等于0,代表可以选择的slave器件数量*/
.bus_num = 1,
.gpio_setup=s2c24XX_spi_gpiocfg_bus0_gpg5_6_7,
};
//3:在mini2440_devices平台设备数组中添加
////
&s3c_device_spi0,
&s3c_device_spi1,
/////
在mini2440_machine_init函数中添加
////
s3c_device_spi0.dev.platform_data= &s3c2410_spi0_platdata;
spi_register_board_info(s3c2410_spi0_board, ARRAY_SIZE(s3c2410_spi0_board));
s3c_device_spi1.dev.platform_data= &s3c2410_spi1_platdata;
spi_register_board_info(s3c2410_spi1_board, ARRAY_SIZE(s3c2410_spi1_board));
///
说明:
4.------------------------------------------------------
打开arch/arm/plat-s3c24XX/Kconfig
找到
////////////
config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
bool
help
SPI GPIO configuration code for BUS0 when connected to
GPE11, GPE12 and GPE13.
config S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7
bool
help
SPI GPIO configuration code for BUS 1 when connected to
GPG5, GPG6 and GPG7.
/////////////////
修改为
//////////////
config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
bool "S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13"
help
SPI GPIO configuration code for BUS0 when connected to
GPE11, GPE12 and GPE13.
config S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7
bool "S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7"
help
SPI GPIO configuration code for BUS 1 when connected to
GPG5, GPG6 and GPG7.
///////////////
在内核根目录下执行
#make menuconfig
进入主目录下的System Type目录,选中
S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7
两个选项
进入主目录->Device drivers
选中[*]SPI support,并进入,选中大部分选项,除了最后一个对tle62X0支持的
编译内核
5:-----------------------------
内核编译完成后进入/root/linux-2.6.32.2/Documentation/spi
执行:arm-linux-gcc -I/root/linux-2.6.32.2/include spidev_test.c
后会生成a.out的spi测试程序;
拷入文件系统运行可看到结果。