主题 : linux 2.6.36+s3c6410 SPI子系统接口讨论(刚刚创建设备成功,与大家分享经验,欢迎讨论) 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 50874
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
贡献值: 0 点
综合积分: 20 分
注册时间: 2011-06-27
最后登录: 2011-10-08
20楼  发表于: 2011-07-02 16:30
linux打错了是2.6.30
级别: 新手上路
UID: 50874
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
贡献值: 0 点
综合积分: 20 分
注册时间: 2011-06-27
最后登录: 2011-10-08
21楼  发表于: 2011-07-02 16:44
static struct spi_board_info s3c6410_spi0_board[]的中断定义本人觉得不应该是IRQSPI的中断,应该是SPI_DEVIECE与CPU的中断。这样CPU才知道SPI设备什么时候有数据,才可以去读取。我的理解是
CUP----SPI的中断(根据平台的定义这个中断是固定的,在SPI源结构体里面定义好了的)
CPU---SPI设备的中断,外部设备与CPU之间的中断,例如MCP2515接收了数据,要让CPU知道只有通过这个中断,然后CPU调用读取函数(就是SPI的一些接口函数的封装,按照一定的协议)读取数据的。
级别: 新手上路
UID: 51429
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2011-07-03
最后登录: 2011-09-17
22楼  发表于: 2011-07-03 14:50
顶起来
级别: 新手上路
UID: 40434
精华: 0
发帖: 30
金钱: 155 两
威望: 31 点
贡献值: 0 点
综合积分: 60 分
注册时间: 2011-03-18
最后登录: 2011-10-15
23楼  发表于: 2011-07-13 16:38
mark
级别: 新手上路
UID: 36737
精华: 0
发帖: 21
金钱: 105 两
威望: 21 点
贡献值: 0 点
综合积分: 42 分
注册时间: 2011-01-20
最后登录: 2011-10-10
24楼  发表于: 2011-07-21 10:03
我用Tiny6410,想利用它的SPI去控制一个外设,按照网上的方法,编译出了这个问题,好像是要include<>,但是我不知道包含哪个头文件,还请指教育。


arch/arm/mach-s3c64xx/built-in.o: In function `mini6410_machine_init':
/opt/FriendlyARM/mini6410/linux/linux-2.6.38/arch/arm/mach-s3c64xx/mach-mini6410.c:547: undefined reference to `s3c64xx_spi_set_info'
/opt/FriendlyARM/mini6410/linux/linux-2.6.38/arch/arm/mach-s3c64xx/mach-mini6410.c:548: undefined reference to `s3c64xx_spi_set_info'
arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x17c): undefined reference to `s3c64xx_device_spi0'
arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x180): undefined reference to `s3c64xx_device_spi1'
make: *** [.tmp_vmlinux1] Error 1


我用的是2.6.38内核,想把这个SPI模块编译成.ko的形式,然后insmod进去。
谢谢
级别: 侠客
UID: 8041
精华: 0
发帖: 86
金钱: 440 两
威望: 99 点
贡献值: 0 点
综合积分: 172 分
注册时间: 2009-08-07
最后登录: 2017-04-04
25楼  发表于: 2011-07-26 18:58
非常谢谢楼主
级别: 新手上路
UID: 41209
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
贡献值: 0 点
综合积分: 38 分
注册时间: 2011-03-27
最后登录: 2015-06-04
26楼  发表于: 2011-08-11 13:48

 回 2楼(trys) 的帖子

请问你是如何解决的,能否分享一下
级别: 新手上路
UID: 55215
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2011-09-14
最后登录: 2011-11-23
27楼  发表于: 2011-09-14 11:36
请教大侠,最近在学习基于2.6.18内核的SPI驱动,SPI外设驱动是直接使用内核自带的spidev.c这个驱动文件。ARM9上集成了一个SPI主机控制器。根据2.6内核的设备驱动模型,SPI主机控制器的设备注册是作为平台设备注册到内核中去的,SPI主机控制器的驱动注册过程中调用了自身驱动的probe函数,在这个probe函数里通过层层调用,最终在spi_new_device这个SPI核心层函数中使用device_register函数对扫描到的SPI外设进行设备注册,然而在SPI外设驱动注册的过程中,spidev.c里的probe函数对SPI外设又使用了device_register函数进行设备注册,请问这样先后注册两次怎么回事?按道理来说,注册一次就够了吧?注册两次不会出错吗?标准的做法应该是怎么样的?(从我的调试过程来看,如果没有spidev.c里的再次注册,LINUX启动后,在/DEV下是没有对应的设备节点的)
级别: 新手上路
UID: 55215
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2011-09-14
最后登录: 2011-11-23
28楼  发表于: 2011-09-14 15:49
我进一步发现,SPI主机控制器和SPI外设都被device_add了2次(device_register里封装了device_add):SPI主机控制器是在platform_device_register里和驱动probe时注册2次设备;SPI外设是在spi_new_device里和驱动probe时注册2次设备。这2次device_add有何区别和联系?
级别: 侠客
UID: 23023
精华: 0
发帖: 103
金钱: 520 两
威望: 104 点
贡献值: 0 点
综合积分: 206 分
注册时间: 2010-06-11
最后登录: 2012-11-25
29楼  发表于: 2011-09-14 20:47
群主,你那个图是用什么软件画得?谢谢了