tiny6410开发板linux系统下的SPI驱动和测试

来源:互联网 发布:怎样合理网络理财 编辑:程序博客网 时间:2024/04/30 03:12

Step0:配置内核文件加入spi支持.一定要加上”User mode SPI driver support”这个支持,如图.

Step1:打开arch/arm/mach_s3c64XX/mach_mini6410.c
增加如下代码:

01static void cs_set_level(unsigned line_id, int lvl) {
02 gpio_direction_output(line_id, lvl);
03}
04static struct s3c64xx_spi_csinfo s3c64xx_spi0_csinfo = {
05 .fb_delay=100,
06 .line=S3C64XX_GPC(3),
07 .set_level=cs_set_level,
08};
09static struct spi_board_info s3c6410_spi0_board[] = {
10[0] = {
11.modalias = "spidev",
12.bus_num= 0,
13.chip_select= 0,
14.irq =IRQ_SPI0,
15.max_speed_hz= 500*1000,
16.mode=SPI_MODE_0,
17.controller_data=&s3c64xx_spi0_csinfo,
18},
19};
20static struct s3c64xx_spi_csinfo s3c64xx_spi1_csinfo = {
21 .fb_delay=100,
22 .line=S3C64XX_GPC(7),
23 .set_level=cs_set_level,
24};
25static struct spi_board_info s3c6410_spi1_board[] = {
26[0] = {
27.modalias = "spidev",
28.bus_num= 1,
29.chip_select= 0,
30.irq = IRQ_SPI1,
31.max_speed_hz = 500*1000,
32.mode=SPI_MODE_0,
33.controller_data=&s3c64xx_spi1_csinfo,
34},
35};

找到mini6410_devices这个结构,加下面两行,

&s3c64xx_device_spi0,
&s3c64xx_device_spi1,
加入到mini6410_devices结构中,就可以将设备s3c64xx-spi.0和s3c64xx-spi.1进行初始化,

在函数 mini6410_machine_init中添加:

1s3c64xx_spi_set_info(0,0,2);
2 s3c64xx_spi_set_info(1,0,2);
3 spi_register_board_info(s3c6410_spi0_board, ARRAY_SIZE(s3c6410_spi0_board));
4 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源码包下的linux/Documentation/spi/spidev_test.c 程序来检测
# gedit spidev_test.c 修改 spidev1.1 为 spidev1.0
# arm-linux-gcc spidev_test.c -o spi
将编译好的程序下到板子上
用一根跳线将SCON接口的13针脚和14针脚连接

01[root@FriendlyARM spitest]# ./spi
02 spi mode: 0
03 bits per word: 8
04 max speed: 496268 Hz (496 KHz)
05 
06FF FF FF FF FF FF
07 40 00 00 00 00 95
08 FF FF FF FF FF FF
09 FF FF FF FF FF FF
10 FF FF FF FF FF FF
11 DE AD BE EF BA AD
12 F0 0D

OK.

转自:http://junzhu.info/2012/08/25/651.html