spi总线注意事项和linux下使用实战

- 日理万妓 2022-01-17 04:19 359阅读 0赞

spi总线注意事项和linux下使用实战

spi一般是4线(CS、MISO、MOSI、SCK)或者3线(MISO和MOSI线合并),当然这里忽略了设备芯片的电源、地等其他线。
一条spi总线上只有一个master,slave根据片选情况可以有多个,但同一时间只能有一个工作。通过片选cs信号来区分。
这里只关心spi总线的外设,所以不用像spi host controller驱动及内核spi_bus_type那样关心很多spi的细节。
具体协议参见《SPI_motorola_specification.pdf》

spi总线注意事项和linux下使用实战

注意图中CPHA和CPOL表示什么意思,决定了是哪个沿采样。
需要注意linux对应的mode。

一般外设驱动涉及的内核提供的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_devices()进而调用spi_alloc_device()、 spi_add_device ()进行),并注册进相应的spi总线号上(这样struct spi_device和struct spi_master的父子关系就确定了)。

随便搜索其中一个spi函数,即可在驱动中找到很多spi的设备驱动例子。

具体请参考我的免费的linux各种驱动开发课程如下:
https://edu.51cto.com/course/17138.html

另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html

转载于:https://blog.51cto.com/8906847/2367929

发表评论

表情:
评论列表 (有 0 条评论,359人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SPI总线协议裸板操作

    好久没发表了哈,前一段时间准备找工作的事情啦,但是基本上告一段落了,把一些自己以前学习的心得写在这里,以后想看的时候再回来看,当然也欢迎想学习的来交流啊。 SPI总线,全名是