linux-2.6.26下SPI(1)驱动移植调试

来源:互联网 发布:产品图纸设计软件 编辑:程序博客网 时间:2024/06/08 16:17

参考了Linux2.6.32下SPI驱动的移植(mini2440)这篇文章。

不同的是我的内核是linux-2.6.26  SPI口是SPI1 GPG5 GPG6 GPG7,片选是GPA1

mach-smdk2410.c下增加代码:

/* SPI // tianyl2011-0927 鍙傝€僲ach-qt2410.c绉绘*/
#include <asm/arch/spi.h>
#include <asm/arch/spi-gpio.h>
#include <linux/spi/spi.h>
#include <linux/spi/spidev.h>
#include <linux/spi/spi_bitbang.h>
#include <asm/arch/regs-gpio.h>
#include <asm-arm/arch-s3c2410/map.h>
#include <asm-arm/arch-s3c2410/spi.h>

static struct spi_board_info s3c2410_spi1_board[] = {
        [0] = {
                 .modalias = "spidev",
                .bus_num        = 0,  
                .chip_select        = 0,
                .irq = IRQ_EINT9,
                .max_speed_hz         = 500*1000,
        },
};

static struct s3c2410_spi_info s3c2410_spi1_platdata = {
        .pin_cs = S3C2410_GPA1,
        .num_cs = 1,
//        .bus_num = 0,
};

以下增加相关调用:
static struct platform_device *smdk2410_devices[] __initdata = {
    &s3c_device_usb,
//    &qt2410_spi,// tianyl2011-0927
    &s3c_device_spi1,// forch
    //&s3c_device_lcd,
    //&s3c_device_wdt,
    //&s3c_device_i2c,
    //&s3c_device_iis,
};


static void __init smdk2410_init(void)
{
    platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
    s3c_device_spi1.dev.platform_data=&s3c2410_spi1_platdata;// forch
    spi_register_board_info(s3c2410_spi1_board,ARRAY_SIZE(s3c2410_spi1_board));// forch
    smdk_machine_init();
}

spi_s3c24xx.c下s3c24xx_spi_probe函数增加IO初始化:

    // CS1
    s3c2410_gpio_cfgpin(S3C2410_GPA1, S3C2410_GPA1_OUT);
    s3c2410_gpio_setpin(S3C2410_GPA1, 1);

    // GPG 5 6 7閰嶇疆涓篠PI鎺ュ彛 SPI1
    s3c2410_gpio_cfgpin(S3C2410_GPG5, S3C2410_GPG5_SPIMISO1);
    s3c2410_gpio_cfgpin(S3C2410_GPG6, S3C2410_GPG6_SPIMOSI1);
    s3c2410_gpio_cfgpin(S3C2410_GPG7, S3C2410_GPG7_SPICLK1);


spidev_test.c修改

static const char *device = "/dev/spidev0.0";

配置相关选项,生成内核,下载,下载应用。

确认驱动成功加载

[root@forch app]# ls /dev/ | grep spi
spidev0.0
[root@forch app]#

运行应用:

[root@forch app]# ls
spidev_test.o
[root@forch app]# ./spidev_test.o
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)

0D 00 00 00 00 00
00 60 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
[root@forch app]#

用示波器观察各个IO,有波形出现。我的SPI接个外设,所以打印的信息和发送的不一样。