打印

关于SPI传输过程中,CS如何动作的问题

[复制链接]
1967|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
笨蛋第一|  楼主 | 2020-6-22 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于主从设备一问一答模式,CS如何动作的问题有如下疑问?
1、标准的SPI协议中,除CS作为片选外,有没有规定在何种工况下,CS做标准的动作?
    如:CS低电平有效。主机请求从机数据,在主机发完所有数据后,CS是否要重新拉高,延时后在拉低,主机  查询从机回复数据,直至数据正确,在将CS拉高。这种工况CS拉高两次,第一种意义:主机发送完请求数据。第二种意义:主机接收到响应数据,此次通信结束。
2、操作系统中,将设备封装成文件操作方式,read()时,bufsize是否决定了CLK的个数,即使驱动可以正确判断出实际字节数小于bufsize的长度,但是仍要提供bufsize个CLK

使用特权

评论回复

相关帖子

沙发
笨蛋第一|  楼主 | 2020-6-22 11:01 | 只看该作者
补充一下应用场景:主机与从机是通过可插拔接口连接的,牵扯到硬件的可互换性,即主机和从机可能是多个厂家分别生产,

使用特权

评论回复
板凳
cdlongbo| | 2020-6-22 15:02 | 只看该作者
CS 控制一般有两个方式  1.软件控制  2.硬件控制 看你从设备是怎样要求的

使用特权

评论回复
地板
cdlongbo| | 2020-6-22 15:03 | 只看该作者
CS一般软设计会比较方便

使用特权

评论回复
5
chunyang| | 2020-6-22 15:14 | 只看该作者
片选信号主要用于多个从机及需要严格控制功耗的场合。楼主的流程并不合适,正确的流程是:置CS有效、延时(是否需要以及延时多久需查阅SPI设备的手册)、主机发起通迅然后等待SPI设备的回复、判断回复完成挂起CS。如果SPI设备是独立可接入、可移出的外设,而非电路组成部分,那么还需要在主机发起通迅等待设备回复时启动一个定时,定时结束还未收到设备响应要报错提示并挂起外设。

使用特权

评论回复
6
chunyang| | 2020-6-22 15:15 | 只看该作者
从2楼帖看,楼主所及外设属于我前帖说的独立可接入、可移出的外设,必须加定时报错处理。

使用特权

评论回复
7
笨蛋第一|  楼主 | 2020-6-22 15:34 | 只看该作者
cdlongbo 发表于 2020-6-22 15:02
CS 控制一般有两个方式  1.软件控制  2.硬件控制 看你从设备是怎样要求的

为了做到软件APP,以及硬件互换,CS都是规定为软件控制,硬件控制对互换的影响很大。

使用特权

评论回复
8
笨蛋第一|  楼主 | 2020-6-22 15:37 | 只看该作者
chunyang 发表于 2020-6-22 15:14
片选信号主要用于多个从机及需要严格控制功耗的场合。楼主的流程并不合适,正确的流程是:置CS有效、延时( ...

您好,您的意思是,主机请求到从机响应,CS只是动作一次,即主机请求前拉低CS,从机回复完成,主机拉高CS?我理解是否正确

使用特权

评论回复
评论
笨蛋第一 2020-6-24 08:40 回复TA
@chunyang我也在上面补充了,重点是主机从机是厂家分开做的,所以需要一个规定的时序,不是原理不原理的问题。我发这个贴,也就是想知道大家在这种带有SPI的通信时候,大家对这个CS的动作理解,或者标准的CS动作。可能我的疑问点不是很突出,如果主从都是我自己做,这个时序就无所谓了,但是我做的是主机,假如您做从机,您在做从机的时候是不是就要这样的时序? 
chunyang 2020-6-23 15:48 回复TA
前帖已经说的很清楚,为何非要确认几次?就不能从原理上去理解么?理解原理就根本不会有困惑,而只抓皮毛不过是个貌似懂了。 
9
coody| | 2020-6-22 17:04 | 只看该作者
CS是片选,低电平选中要访问的器件,只要不停止访问,CS可以一直为低电平。
CS变高电平,则会复位SPI接口,用于异常时从头开始通讯。一般要求访问完成后,CS拉高复位SPI。

使用特权

评论回复
10
笨蛋第一|  楼主 | 2020-6-23 09:06 | 只看该作者
coody 发表于 2020-6-22 17:04
CS是片选,低电平选中要访问的器件,只要不停止访问,CS可以一直为低电平。
CS变高电平,则会复位SPI接口, ...

您好,我理解您说的访问 是:主机请求,与从机响应为一次访问,所以这个过程也仅需要主机请求前拉低CS,从机响应完,主机拉高CS

使用特权

评论回复
11
玄德| | 2020-6-23 09:26 | 只看该作者
本帖最后由 玄德 于 2020-6-23 09:29 编辑


你的问题有点让人摸不到头脑。应当是你对 SPI 不了解导致的。

SPI,发送和接收是同时完成的,主机给从机发一位,从机同时回送一位,同步的。
从机回复的数据必须由主机的 clk 驱动,才能一位一位发出来。
从机永远不能主动发话。别指望从机主动告诉你什么,必须是主机先发问。

所以,再理一理你究竟要问什么。


使用特权

评论回复
12
笨蛋第一|  楼主 | 2020-6-23 09:39 | 只看该作者
玄德 发表于 2020-6-23 09:26
你的问题有点让人摸不到头脑。应当是你对 SPI 不了解导致的。

SPI,发送和接收是同时完成的,主机给从机 ...

主机请求从机的数据,从机只有在收到主机下发请求报文后,才能根据报文返回数据。虽然主机下发请求报文的过程中,SPI的特性MISO会有数据回来,但是这个数据主机默认非法,因为从机没有接收到请求报文怎么会有响应报文。


我想要知道的是,有没有标准规定,在这个请求过程中,CS是片选一次,还是片选两次。即主机发送请求报文,到主机查询从机响应报文,CS只片选一次。还是主机请求报文发送完,CS拉低拉高一次,主机查询从机响应报文,CS拉低拉高一次

使用特权

评论回复
13
玄德| | 2020-6-23 09:59 | 只看该作者
笨蛋第一 发表于 2020-6-23 09:39
主机请求从机的数据,从机只有在收到主机下发请求报文后,才能根据报文返回数据。虽然主机下发请求报文的 ...


不存在你说的这个协议。这是你自己如何应用的问题,SPI 协议管不到这一层。







使用特权

评论回复
14
笨蛋第一|  楼主 | 2020-6-23 11:30 | 只看该作者
玄德 发表于 2020-6-23 09:59
不存在你说的这个协议。这是你自己如何应用的问题,SPI 协议管不到这一层。

上次我们很多厂家,在一起说过这个问题,但是其他厂家的工程师反馈说,上述的通信流程不是标准的SPI通信协议,查了一些资料也没有找到标准的SPI协议关于CS的动作规范。
类似SPI的从设备器件nand flash,其实也是这样主从机制,一问一答,只不过在操作系统层当读取或者写flash的时候,都是通过read()或者write(),一个接口实现了一个功能。但是刚才上述的那一套有write()与read(),两套接口实现一个功能。主机write()请求,通过read()查询从机响应,多次read(),可能就要多次动作CS。我们也想要找到更好的方式在OS层去实现。

使用特权

评论回复
15
玄德| | 2020-6-23 11:49 | 只看该作者
本帖最后由 玄德 于 2020-6-23 11:51 编辑

要靠自己去设计这个流程。

一般有两种机制,
一是靠延时,延时足够时间以后,主机去读或写。从机要保证在这段时间以内做好数据准备。SPI 接口的AD、DA都是如此。
二是靠握手,主机去查询。
再有办法,就是靠其他方法了,比如从机给一个额外的 IO 信号。

SPI 只是数据交换的方法而已,基本是纯粹的物理层协议,不涉及更高层。



使用特权

评论回复
16
Jenghiz| | 2020-6-23 15:19 | 只看该作者
CS就是对从设备的选择而已,被选中的从机才可以响应主机的请求。一主一从的应用中,CS基本没意义,从机CS甚至可以直接接地节省一个IO口。一主多从场景中,硬件控制的CS也没有意义。所以CS基本上就是软件控制,要跟哪个从机通讯就哪个接低,延时长短主要看硬件和从机的响应速度

使用特权

评论回复
17
coody| | 2020-6-23 22:18 | 只看该作者
笨蛋第一 发表于 2020-6-23 09:06
您好,我理解您说的访问 是:主机请求,与从机响应为一次访问,所以这个过程也仅需要主机请求前拉低CS, ...

根据你的描述,觉得你对SPI接口的工作原理不了解。简单点讲,SPI就是主从机的移位寄存器连在一起,时钟由主机发出,而CS仅仅是主机选中从机,至于你想怎么控制,全由你自行决定,但是要注意,有的IC是有一定的协议和时序的,比如TF卡(SD卡),SPI接口的FLASH存储芯片,各种SPI接口的ADC、DAC等等。

使用特权

评论回复
18
ddllxxrr| | 2020-6-24 18:23 | 只看该作者
本人认为CS是多SPI通讯时用到,至于,楼主说的操作系统,的函数,我想应是每读一次拉低一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

粉丝