当前位置: 技术问答>linux和unix
怎么样在嵌入式linux下实现spi与外设的通信
来源: 互联网 发布时间:2016-12-10
本文导语: 在drivers/spi/下有spi.c spidev.c omap2_mcspi.c 等驱动程序 我怎么利用驱动实现与外设的通信 ,是否还需要编写外设的驱动程序。 spi的驱动程序有哪些部分组成。 我刚开始学习嵌入式 一些问题不懂。谢谢高...
在drivers/spi/下有spi.c spidev.c omap2_mcspi.c 等驱动程序 我怎么利用驱动实现与外设的通信 ,是否还需要编写外设的驱动程序。 spi的驱动程序有哪些部分组成。 我刚开始学习嵌入式 一些问题不懂。谢谢高手们的解答。
|
SPI的驱动提供的是操作CPU SPI接口的方式 你看到那个目录里针对不同的CPU有不同spi_xxx.c
如果你要写外设的驱动 除了外设功能部分的驱动外 如果是涉及到 SPI 一般是访问外设的寄存器 这个访问方法用上述就可以 可是外设的具体API还是得你写 比如操作一个codec 大概的分布如下
1. CPU SPI access API
SPI_Read(...)
SPI_Write(...)
2. 设备寄存器访问API,用到1里面的API
Codec_Reg_Read(...)
Codec_Reg_Write(...)
3. 设备功能API,用到2里面的API
Codec_Set_Rate(...)
...
如果你要写外设的驱动 除了外设功能部分的驱动外 如果是涉及到 SPI 一般是访问外设的寄存器 这个访问方法用上述就可以 可是外设的具体API还是得你写 比如操作一个codec 大概的分布如下
1. CPU SPI access API
SPI_Read(...)
SPI_Write(...)
2. 设备寄存器访问API,用到1里面的API
Codec_Reg_Read(...)
Codec_Reg_Write(...)
3. 设备功能API,用到2里面的API
Codec_Set_Rate(...)
...
|
帮顶,楼上正解
可能你的外设内核已经支持了吧
可能你的外设内核已经支持了吧
|
如果是刚开始学的话,建议你用最简单的方式操作cpu的spi寄存器,实现与外设的交互
你可以在uboot里找一下相关CPU的spi驱动是怎么写的,然后效仿一下,很简单的
如果你用drivers/spi/下的spi.c spidev.c这些东西的话,你首先需要看懂它们,而想看懂它们不是个简
单的事情,你可能需要了解设备驱动模型的知识,什么device、bus、driver等等,那就很麻烦啦,呵呵
你可以在uboot里找一下相关CPU的spi驱动是怎么写的,然后效仿一下,很简单的
如果你用drivers/spi/下的spi.c spidev.c这些东西的话,你首先需要看懂它们,而想看懂它们不是个简
单的事情,你可能需要了解设备驱动模型的知识,什么device、bus、driver等等,那就很麻烦啦,呵呵
|
1.Linux 的spi 没细看呢,基本上你不需要碰驱动框架的代码,但是得了解一下,比如说read/write是不是通过file_operations调用的,是的话又是通过哪个设备,等等
2.你一定要在Linux里支持你的板子的SPI的话,需要参考的是该目录里其他针对不同CPU的文件,具体编译哪个可以看Kconfig和Makefile
3.关于使用SPI.在应用层通过设备文件接口,内核层通过最底下的SPI API就可以
2.你一定要在Linux里支持你的板子的SPI的话,需要参考的是该目录里其他针对不同CPU的文件,具体编译哪个可以看Kconfig和Makefile
3.关于使用SPI.在应用层通过设备文件接口,内核层通过最底下的SPI API就可以
|
举个例子,如果你用的是powerpc的处理器,那么在uboot下,它的spi驱动位置在
driversspimpc8xxx_spi.c,你看一下,会发现很简洁,里面基本上都是直接操作寄存器的
并没有什么像内核里那样复杂的数据结构,你要是想方便,直接在那里面修改代码就可以,然后在boot下调试
你也可以把那里的代码拿过来,把它改改,编一个内核ko,在内核下调试
刚开始,为了使硬件能正常跑起来,还是建议你采用最简单的方法
等你都搞定了之后,你再去看看内核下的spi.c spidev.c等等,不过可能需要很长时间去学习了,因为你跟
内核下spi.c,跟到最后就是设备模型的东西了,很复杂
也就是说,如果你想实现一个标准的、利用内核提供的spi总线框架来实现的spi总线、spi设备驱动,还要花N
长时间啊,呵呵
不过,也得看你的定位了,如果只是实现设备驱动,那还简单点,代码不用跟的太深,如果你想学习总线驱动
的编写,那就努力学习设备模型的知识吧,嘿嘿
我也在学习,烦~~~