1.查看arch/arm/plat-s3c24xx/devs.c中是否有下面的结构体
2.修改arch/arm/mach-s3c2410/mach-smdk2410.c
注意修改的是mach-smdk2410.c,而不是mach-smdk2440.c
b、在数组static struct platform_device *smdk2410_devices[]最后添加一行&s3c_device_spi0,
c、在函数static void __init smdk2410_init(void)开头添加
在static void s3c24xx_spi_initialsetup(struct s3c24xx_spi *hw)函数结尾添加
该名字就是第2步中的s3c2410_spi0_board[0].modalias,/sys/bus/spi/devices目录下有spi0.0文件。
6.测试程序
直接用Documentation/spi目录下spidev_test.c文件,编译,下载到开发板中。
用镊子短路MOSI和MISO两个引脚,位置在开发板IO扩展口插座上,靠近网口这边的两个引脚,具体参照电路图。
运行测试程序
./spidev_test -D /dev/spidev0.0
结果如下:
static struct resource s3c_spi0_resource[] = {
[0] = {
.start = S3C24XX_PA_SPI,
.end = S3C24XX_PA_SPI + 0x1f,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_SPI0,
.end = IRQ_SPI0,
.flags = IORESOURCE_IRQ,
}
};
static u64 s3c_device_spi0_dmamask = 0xffffffffUL;
struct platform_device s3c_device_spi0 = {
.name = "s3c2410-spi",
.id = 0,
.num_resources = ARRAY_SIZE(s3c_spi0_resource),
.resource = s3c_spi0_resource,
.dev = {
.dma_mask = &s3c_device_spi0_dmamask,
.coherent_dma_mask = 0xffffffffUL
}
};
2.修改arch/arm/mach-s3c2410/mach-smdk2410.c
注意修改的是mach-smdk2410.c,而不是mach-smdk2440.c
a、在include头文件之后添加
#include <linux/spi/spi.h>
#include <mach/spi.h>
static struct spi_board_info s3c2410_spi0_board[] = {
[0] = {
.modalias = "spidev",
.bus_num = 0,
.chip_select = 0,
.irq = IRQ_EINT9,
.max_speed_hz = 500*1000,
},
};
//.pin_cs = S3C2410_GPB1,
static struct s3c2410_spi_info s3c2410_spi0_platdata = {
.pin_cs = S3C2410_GPG2,
.num_cs = 1,
.bus_num = 0,
};
pin_cs这里设置为S3C2410_GPG2,本次试验是“自发自收”,将MISO和MOSI用导线或镊子短路,所以没用到CS引脚。
b、在数组static struct platform_device *smdk2410_devices[]最后添加一行&s3c_device_spi0,
c、在函数static void __init smdk2410_init(void)开头添加
s3c_device_spi0.dev.platform_data= &s3c2410_spi0_platdata;
spi_register_board_info(s3c2410_spi0_board, ARRAY_SIZE(s3c2410_spi0_board));
3.修改drivers/spi/spi_s3c24xx.c文件
在static void s3c24xx_spi_initialsetup(struct s3c24xx_spi *hw)函数结尾添加
s3c2410_gpio_cfgpin(hw->pdata->pin_cs, S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(0x8B, S3C2410_GPIO_SFN2);
s3c2410_gpio_cfgpin(0x8C, S3C2410_GPIO_SFN2);
s3c2410_gpio_cfgpin(0x8D, S3C2410_GPIO_SFN2);
设置CS脚为输出、其他3个引脚为SPI功能。
4.配置内核
内核是用的开发板里的2.6.28.7,需要选上
Device Drivers
->SPI support
->Debug support for SPI drivers
Bitbanging SPI master
Samsung S3C24XX series SPI
User mode SPI device driver support
5.编译内核,烧写新内核
开发板起来之后会在/dev/目录下生成spiddev0.0设备文件,/sys/bus/spi/drivers下有spidev目录,该名字就是第2步中的s3c2410_spi0_board[0].modalias,/sys/bus/spi/devices目录下有spi0.0文件。
6.测试程序
直接用Documentation/spi目录下spidev_test.c文件,编译,下载到开发板中。
用镊子短路MOSI和MISO两个引脚,位置在开发板IO扩展口插座上,靠近网口这边的两个引脚,具体参照电路图。
运行测试程序
./spidev_test -D /dev/spidev0.0
结果如下:
# ./a.out -D /dev/spidev0.0
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 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
上边的数值是接收到的数值,与spidev_test.c中发送的数值一致。