温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-06-28 00:23:43 来源:网络 阅读:570 作者:GaoNeil 栏目:移动开发

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI