linux spi应用程序中如何设置片选?比如说就是linux自带的spidev_test.c这个应用,我怎么设片选?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux spi应用程序中如何设置片选?比如说就是linux自带的spidev_test.c这个应用,我怎么设片选?相关的知识,希望对你有一定的参考价值。

参考技术A spidev就决定了cs追问

哦,,我现在明白在board_info里面的DEV里面有一位是设片选号的,,是不是我取0就是表示用的NPCS0这个片选脚呀?

追答

spidev1.3, 就是spi1的片选3

本回答被提问者采纳

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

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》

技术图片

注意图中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

以上是关于linux spi应用程序中如何设置片选?比如说就是linux自带的spidev_test.c这个应用,我怎么设片选?的主要内容,如果未能解决你的问题,请参考以下文章

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

SPI怎么区分主从? 两个设备之间通过SPI连接,根据啥来定义主从?

Linux SPI总线 - 概述

spidev 无法控制片选信号

Linux驱动开发20-SPI子系统分析

PMODB GT202 WIFI的使用