FL2440开发板spi驱动分析(1)

1.查看arch/arm/plat-s3c24xx/devs.c中是否有下面的结构体

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中发送的数值一致。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sina33备份的文件20150609_2100.7z 全志a33要生成设备节点需要改动的地方: sina33打开spidev0.0的步骤.txt (全志a33下生成设备节点/dev/spidev0.0) 0、 S:\lichee\tools\pack\chips\sun8iw5p1\configs\default\env.cfg bootdelay=0 修改为 bootdelay=3 方便按 enter 进u-boot,进行调试。 1、 rootroot@rootroot-E400:~/wyb/sina33/lichee/linux-3.4$ rootroot@rootroot-E400:~/wyb/sina33/lichee/linux-3.4$ make ARCH=arm menuconfig (sina33的原始menuconfig) Device Drivers ---> [*] SPI support ---> --- SPI support [ ] Debug support for SPI drivers *** SPI Master Controller Drivers *** < > Altera SPI Controller < > Utilities for Bitbanging SPI masters < > GPIO-based bitbanging SPI Master < > OpenCores tiny SPI <*> SUNXI SPI Controller < > Xilinx SPI controller common module < > DesignWare SPI controller core support *** SPI Protocol Masters *** < > User mode SPI device driver support < > Infineon TLE62X0 (for power switching) (sina33的原始menuconfig) Device Drivers ---> [*] SPI support ---> --- SPI support [ ] Debug support for SPI drivers *** SPI Master Controller Drivers *** < > Altera SPI Controller < > Utilities for Bitbanging SPI masters < > GPIO-based bitbanging SPI Master < > OpenCores tiny SPI <*> SUNXI SPI Controller < > Xilinx SPI controller common module < > DesignWare SPI controller core support *** SPI Protocol Masters *** (需要打开这里才能够生成设备节点:/dev/spidev0.0) <*> User mode SPI device driver support < > Infineon TLE62X0 (for power switching) 2、 S:\lichee\tools\pack\chips\sun8iw5p1\configs\y3\sys_config.fex ;---------------------------------------------------------------------------------- ;SPI controller configuration ;spi_used = SPIx enable ;spi_cs_bitmap = SPI bit mapping ;---------------------------------------------------------------------------------- [spi0] spi_used = 1 spi_cs_bitmap = 1 spi_mosi = port:PC00<3><default><default><default> spi_miso = port:PC01<3><default><default><de
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值