spi总线注意事项及在linux上的实战使用
发布时间: 2020-06-28 00:23:43
来源: 51CTO
阅读: 472
作者: GaoNeil
spi总线注意事项及在linux上的实战使用
spi通常是4线(CS、MISO、MOSI、SCK )或3线) MISO和MOSI线的集成,但这里当然忽略了其他线,如设备芯片的电源、接地等。
一条spi总线只有一个主控器。 根据切片的选择情况,可以有多个slave,但一次只能执行一个任务。 用芯片选择cs信号进行区分。
这里只关心spi总线的外围设备,不需要像spi host controller驱动程序和内核spi_bus_type那样关心很多spi细节。
具体协议请参照《SPI_motorola_specification.pdf》
注意图中的CPHA和CPOL表示什么意思,决定是哪一个边缘采样。
需要注意支持linux的模式。
与常见外围设备驱动程序相关的内核提供的spi api如下:
具体见include/linux/spi/spi.h
spi_register_driver (,spi_unregister_driver ) )
struct spi_driver
spi_write (,spi_read )、spi_write_then_read )、spi_sync )、spi_async )、spi_setup ) )
struct spi_device
struct spi_message,spi_message_init (,spi_message_add_tail ) )
对于arm device tree之前的board方法,spi设备必须通过调用spi_register_board_info ()进行注册。 对于当前的arm device tree,spi的bus host controller驱动程序将根据添加到device tree的spi controller节点的子节点生成相应的spi设备。 将执行从spi_register_master ()调用of_register_spi_degister ()的spi_add_device (),并将其注册到相应的SPI总线编号中这将确定struct spi_device和struct spi_master之间的父子关系。
如果检索其中一个spi函数,就能在驱动程序中找到很多spi的设备驱动程序例子。
具体请参考我的免费linux各种驱动程序开发课程:
3359 edu.51cto.com/course/17138.html
另外,请看我的相关培训视频:
欢迎参加我们推出的每门课程: https://edu.51cto.com/lecturer/8896847.html