首页
Java
登录
6mi
u
盘
搜
搜 索
Java
SPI驱动的移植(Linux2.6.24)
SPI驱动的移植(Linux2.6.24)
xiaoxiao
2021-02-28
98
主题 : SPI驱动的移植(Linux2.6.24)
复制链接 | 浏览器收藏 | 打印
aoohoo
级别: 新手上路
作者资料 发送短消息 加为好友 UID:
3083
精华:
0
发帖:
36
金钱:
360 两
威望:
360 点
贡献值:
0 点
综合积分:
72 分
注册时间:
2008-12-25
最后登录:
2009-12-19
楼主
发表于: 2009-07-07 17:42
只看楼主 | 小 中 大
SPI驱动的移植(Linux2.6.24)
为了使用SPI 驱动,必须在配置Linux 编译选项时,开启相应的SPI 选项,如下所示 -> Device Drivers -> SPI support SPI support *** SPI Master Controller Drivers *** -*- Bitbanging SPI master <*> Samsung S3C24XX series SPI < > Samsung S3C24XX series SPI by GPIO *** SPI Protocol Masters *** < > SPI EEPROMs from most vendors <*> User mode SPI device driver support < > Infineon TLE62X0 (for power switching) 选择SPI support 是使Linux 内核提供SPI 支持,选择该选项会默认选择Bitbanging SPImaster,还需选择Samsung S3C24XX series SPI,告诉内核使用S3C2440A的SPI 控制器驱动。 首先在 devs.c中,增加板子信息 /* 2009/06/30 jwpan add by spi begin */ static struct spi_board_info s3c2410_spi0_board[] = { [0] = { .modalias = "spidev", /*跟spidev.ko驱动名要相同,不然挂载不上*/ .platform_data = NULL, .bus_num = 0, /*使用的第一条BUS线,2410支持0,1两根*/ .chip_select = 1, /*片选信号,和上面结合,在/dev 里面可以看到spidev0.1*/ .max_speed_hz = 500*1000, /CLK频率*/ }, }; static struct s3c2410_spi_info s3c2410_spi0_platdata = { .pin_cs = S3C2410_GPB1, .board_info = s3c2410_spi0_board, .board_size = ARRAY_SIZE(s3c2410_spi0_board), }; /* 2009/06/30 jwpan add by spi end */ 复制代码 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, /* 2009/06/30 jwpan add by spi begin */ //.coherent_dma_mask = 0xffffffffUL .coherent_dma_mask = 0xffffffffUL, .platform_data = &s3c2410_spi0_platdata, /* 2009/06/30 jwpan add by spi end */ } }; 复制代码增加初始化代码,也可以加到mach-smdk2410.c里面 static struct platform_device __initdata *smdk_devs[] = { &s3c_device_nand, &smdk_led4, &smdk_led5, &smdk_led6, &smdk_led7, /* 2009/06/30 jwpan add by dm9000 spi begin */ &s3c_device_spi0, /* 2009/06/30 jwpan add by dm9000 spi end */ }; 复制代码在spi.c的spi_register_master函数里面,有这么一个判断: if(master->num_chipselect == 0) return -EINVAL; 复制代码本以为master->num_chipselect这个值可以通过硬件检测拿到,或者驱动有这样的设置. 万万没有想到,这个值就是没有初始化. 需要在spi_s3c24xx.c里面增加一句代码: hw->bitbang.txrx_bufs = s3c24xx_spi_txrx; hw->bitbang.master->num_chipselect = 2; /* add */ dev_dbg(hw->dev,"bitbang at %p\n",hw->bitbang); 复制代码另外,在 *spi_new_device函数里面,还有一个判断的bug,num_chipselect也是从0开始的,>=的话就不对了. //if (chip->chip_select >= master->num_chipselect) { if (chip->chip_select > master->num_chipselect) { 复制代码编译内核,启动后可以在/dev/下面看到spidev.0.1 之后,就可以使用spidev_test ,spidev_fdx程序进行测试了,这两个文件在linux2.6.30的Documentation/Spi目录下面有。 最后,提示一下: I2C/SPI支持“线与”,允许多个设备互连。所以协议规定:在无数据传输(开始前、结束后)时,时钟和数据线都处于“释放”状态,也就是“高阻”状态。 在“释放”状态,如果有上拉电阻(内部或外部的),用外用表测会是高电平(1);如果没有上拉电阻,用万用表测是低电平(0)。 简单一点就是说:SPI的CLK只有在有数据通信时,才会测得出波形,千万别以为SPI出问题了。 Linux2.6.24.7以后,SPI有变化,不知道怎么移植.
顶端
回复 引用
xmh800813
求真知!去浮躁!
级别: 侠客
作者资料 发送短消息 加为好友 UID:
6514
精华:
0
发帖:
84
金钱:
760 两
威望:
640 点
贡献值:
0 点
综合积分:
168 分
注册时间:
2009-06-04
最后登录:
2013-05-03
1楼
发表于: 2009-07-07 22:26
只看该作者 | 小 中 大
不错,支持原创!!
顶端
回复 引用
aoohoo
级别: 新手上路
作者资料 发送短消息 加为好友 UID:
3083
精华:
0
发帖:
36
金钱:
360 两
威望:
360 点
贡献值:
0 点
综合积分:
72 分
注册时间:
2008-12-25
最后登录:
2009-12-19
2楼
发表于: 2009-07-12 22:57
只看该作者 | 小 中 大
<*> Samsung S3C24XX series SPI 是spi master驱动 <*> User mode SPI device driver support 是spi dev驱动 也就是说硬件连接好spi设备之后,不用写任何驱动,就可以使用. 之后使用spidev_test就可以测试一下了,正常连接之后,再在这个程序上面修改,加上自己设备的一些时序操作就可以了
顶端
回复 引用
mutongxin
fighting
级别: 新手上路
作者资料 发送短消息 加为好友 UID:
5937
精华:
0
发帖:
29
金钱:
205 两
威望:
112 点
贡献值:
0 点
综合积分:
58 分
注册时间:
2009-05-14
最后登录:
2012-07-23
3楼
发表于: 2009-09-06 21:01
只看该作者 | 小 中 大
楼主好人啊
顶端
回复 引用
师兴仔
级别: 新手上路
作者资料 发送短消息 加为好友 UID:
6452
精华:
0
发帖:
30
金钱:
300 两
威望:
202 点
贡献值:
0 点
综合积分:
60 分
注册时间:
2009-06-02
最后登录:
2011-03-23
4楼
发表于: 2009-10-21 20:42
只看该作者 | 小 中 大
为什么我编译的时候没有<*> Samsung S3C24XX series SPI < > Samsung S3C24XX series SPI by GPIO 这两处选项?
顶端
回复 引用
feiyangczm
级别: 骑士
作者资料 发送短消息 加为好友 UID:
4234
精华:
0
发帖:
152
金钱:
1420 两
威望:
1142 点
贡献值:
11 点
综合积分:
304 分
注册时间:
2009-03-05
最后登录:
2012-08-18
5楼
发表于: 2009-11-05 15:07
只看该作者 | 小 中 大
回 楼主(aoohoo) 的帖子
有没有尝试过左2个spi设备驱动的移植,我做了下,但发现有问题,具体情况: http://www.arm9home.com/bbs/read.php?tid-3520.html
顶端
回复 引用
stronghawk
级别: 新手上路
作者资料 发送短消息 加为好友 QQ联系 UID:
15762
精华:
0
发帖:
2
金钱:
10 两
威望:
2 点
贡献值:
0 点
综合积分:
4 分
注册时间:
2010-03-09
最后登录:
2010-03-29
6楼
发表于: 2010-03-09 17:44
只看该作者 | 小 中 大
顶,我正在做呢,不过我的内核版本更高啊,2.6.32的,很多东东不一样!有相同的联系我!
顶端
回复 引用
super_haihai
级别: 新手上路
作者资料 发送短消息 加为好友 QQ联系 UID:
29618
精华:
0
发帖:
16
金钱:
80 两
威望:
16 点
贡献值:
0 点
综合积分:
32 分
注册时间:
2010-10-01
最后登录:
2010-11-17
7楼
发表于: 2010-11-04 14:23
只看该作者 | 小 中 大
回 6楼(stronghawk) 的帖子
我也是啊,问题很大
顶端
回复 引用
zxw54007
级别: 新手上路
作者资料 发送短消息 加为好友 UID:
26946
精华:
0
发帖:
14
金钱:
70 两
威望:
14 点
贡献值:
0 点
综合积分:
28 分
注册时间:
2010-08-17
最后登录:
2012-10-22
8楼
发表于: 2011-09-16 15:52
只看该作者 | 小 中 大
谢谢,支持下
顶端
回复 引用
iamjieer
级别: 新手上路
作者资料 发送短消息 加为好友 UID:
81714
精华:
0
发帖:
9
金钱:
50 两
威望:
10 点
贡献值:
0 点
综合积分:
18 分
注册时间:
2012-11-13
最后登录:
2013-07-05
9楼
发表于: 2012-11-26 10:57
只看该作者 | 小 中 大
MARK。。。还没搞成功。。。。。
转载请注明原文地址: https://www.6miu.com/read-64992.html
技术
最新回复
(
0
)