您尚未登录。

楼主 # 2022-07-12 09:08:08

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

出发点:需要做个可扩展的控制器,类似PLC,IO点不够可以增加扩展模块来扩充IO,没有485等串口,可以增加扩展模块来扩充。
西门子 PLC图片如下:
_20220712085108.png

CPU主控打算用全志T113系列,
考虑扩展模块上芯片不会用太高端,所以只能从UART、SPI、I2C、RS485、CAN这类的去考虑,
1、需要多从机
2、需要高速
3、需要远距离抗干扰,比如CPU挂10个扩展模块,线长都出去了半米了。

综合考虑,T113处选择SPI接口,
使用将SPI改为3线,使用CLK、MOSI、MISO
考虑远距离传输的抗干扰性,将3根信号线变为差分信号。
T113连接CPLD,CPLD将单端信号变为两个端口输出,来模拟差分线。
在接收端,使用高速比较器进行接收数据,市面在售的7ns比较器比较便宜。
增加总线的地址机制,每个从设备都有地址,当收到自己地址的数据需要发送时才会进行发送,否则发送为高阻态。
下面是初版设计原理图,
_20220712090737.png

离线

楼主 #1 2022-07-12 09:11:27

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

目前的情况下,需要给每个模块设置地址,这是比较麻烦的,需要考虑增加拨码开关用于设置地址,
比如我需要增加4个相同的IO扩展模块,每个IO扩展模块的固件相同,不设置拨码地址,
CPU需要识别出每个模块,以及他们之间的排序。
基于这个考虑,需要在差分线上,增加差分交叉开关,
在整体上电时,CPU对每个从机进行地址赋值。

离线

楼主 #7 2022-07-12 14:44:43

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

jiaowoxiaolu 说:

cpld不需要吧,直接用max485芯片或者mcp2551这类转一下就行了,专门转差分就用一颗CPLD大材小用了

485芯片确实可以单端转差分等操作,但要高速的,实在太贵了,比如100Mbps的RS485芯片上百了。
一般便宜的都不超过1Mbps

离线

楼主 #8 2022-07-12 14:45:29

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

jiaowoxiaolu 说:

SN65LVDS049 这个应该正好
http://www.ti.com/cn/lit/gpn/sn65lvds049

我看了TI的lvds类转换芯片,价格比较贵,所以排除了。

离线

楼主 #9 2022-07-12 14:51:03

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

le062 说:

补充下,串联方案对于SPI这种同步信号可能不合适,CLK与MISO容易出现同步问题。更适合串口类的异步信号

多谢大佬分享,串联方式不太好我打算用1G带宽的USB交叉开关来做中继

离线

楼主 #10 2022-07-12 14:51:47

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

@Gentlepig
MISO和MOSI都用差分了,MISO是soc输入端,不是输出。
多谢信息分享,台达用的spi,
考虑稳定性,所以我加差分。

扩展模块的核心供电可以从总线上取,但输出不从总线上取,扩展模块需要外供电。

最近编辑记录 迪卡 (2022-07-12 14:55:47)

离线

楼主 #13 2022-07-12 16:02:05

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

阿黄 说:

不考虑CAN吗?

CAN速度达不到50M吧,即使能,也比较贵

离线

楼主 #20 2022-07-13 12:51:58

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

多谢大佬分享,是个参考项!

离线

楼主 #21 2022-07-13 12:56:01

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

LinjieGuo 说:

@阿黄
我之前使用485芯片来延长SPI总线,挂接HC595/HC165,线越长,相位偏移,走形便越厉害。
如果器件传输延迟低,SPI CLK不要太高,感觉没问题。

大佬能详细讲讲,吗?
你是用的RS485芯片对SPI进行延长,
也就是MOSI和CLK用了两个485芯片,
在设备HC595端也放了两个485芯片进行接收,
转出来的CLK和MOSI相位对不上吗?
单向发送也有相位偏移的问题吗?

我的从机器件打算用CPLD做,响应时间应该挺快的。
我其实有往100M跑的打算

离线

楼主 #22 2022-07-13 12:59:10

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

@阿黄
单向发送肯定没问题,但接收数据时,CLK和MISO的相位并不一致,因为CLK是主机端发出,而MISO是从机端发出。是降低速度还是做延迟补偿?

单向发送没问题就行,那就是说明,CLK和MOSI是一致的。
但为什么@LinjieGuo说他通过485芯片延长的SPI,到595会有相位问题?

离线

楼主 #24 2022-07-13 17:58:24

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

@yobbo
我觉得上电先协商是一个好的思路。

我先进行定义,就是从机回复数据的时候,第一个字节为0x00,第二个字节为0xAA,
主机收到数据后,看需要移多少位才能得到0x00和0xAA,
然后下发从机相位移动的位数,
使得主机接收数据正常为0x00和0xAA。
配置好从机相位填空位数,就应该可以了吧。

主机接收数据我统一第一个字节不要。

离线

楼主 #26 2022-07-13 22:25:44

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

大家还有什么建议和想法?这周我再总结一下,画下改进后的【迪卡总线】
已了解台达plc用的spi,已了解西门子背板总线用的无cs的spi,即全双工i2c。

最近编辑记录 迪卡 (2022-07-13 22:26:48)

离线

楼主 #30 2022-07-14 08:50:25

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

david 说:
迪卡 说:

大家还有什么建议和想法?这周我再总结一下,画下改进后的【迪卡总线】
已了解台达plc用的spi,已了解西门子背板总线用的无cs的spi,即全双工i2c。

你这距离要多远 多高的速率 延迟啥要求

前面说了个大概,最远距离半米吧,上面挂接多个从设备。

速率需求就是主机发出控制某个IO的命令或是读取某个IO的状态,时间小于1us吧,先这样暂时定一个。
假设读取一个IO状态连发送带接收需要32bit的数据,那么32bit宽裕点算,按50bit算,获取IO状态用时按小于1us.
那么时钟频率最少需要50MHz

离线

楼主 #35 2022-07-15 21:23:41

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

Gentlepig 说:

03.pdf

又测了一遍,连了下,不一定对,也没分析原理。

多谢大佬分享点滴。

离线

楼主 #36 2022-07-16 20:19:50

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

NRZI编码加上4b/5b的方式,将时钟与信号合并在一条差分线中传输。

通过研究了解了USB和以太网的一些知识。

这是又想手撸一套以太网😂

离线

楼主 #37 2022-07-16 20:24:15

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

NRZI编码加上4b/5b编码的方式,将时钟与信号合并在一条差分线中传输。
发送和接收共使用4根线。
这....感觉像是自己DIY一套以太网了。

还是有个问题,cpld之间数据可以高速收发了,
cpld与soc之间不太好整

离线

楼主 #39 2022-07-16 21:47:59

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

优化掉了时钟线,目前只剩4根了
TX+
TX-
RX+
RX-
和以太网一样,
soc可以默认spi接收的第1和第2个字节不要,这段时间用来等到从机响应时间。
假如从机这时候有数据到cpld,先存在fifo里,也不需要多大两个字节就够了。
当第3个字节的时钟到来时,cpld给spi吐出的数据就从fifo里取。

离线

楼主 #41 2022-07-17 11:30:21

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

wurst 说:

以前做个类似的产品,主模块+N个扩展模块。采用SPI+N个片选。每个模块内置总线驱动器,片选采用递推方式,自动自增。

多谢大佬分享。

离线

楼主 #43 2022-07-18 11:58:20

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

f9f6fe4ee948c7b31d5f6d7d7da061f.jpg
应该还有bug

离线

楼主 #44 2022-07-19 21:48:09

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

bf17a44ca6a9711dd2e93423cb844b6.png
这个电路是我比较倾向的。
在上电时,MUX都会打到终端电阻位置,
这样只有离CPU单元最近的模块能被访问到,就可以依次进行地址赋值。

离线

楼主 #47 2022-07-20 12:57:55

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】

@LinjieGuo
将主机部分和从机部分封装成一个模块。
【主机模块】
将连接主机的CPLD做成一个小模块,接口引脚如下:
VCC--供电
GND

SPI-MOSI--SPI接口
SPI-MISO
SPI-CLK
SPI-CS

A--差分收发接口
B
Y
Z

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn