搜索
bottom↓
回复: 19

新设计串口,类似UART单线,能节省高达85%传输时间和几十Mbps速度

[复制链接]

出0入8汤圆

发表于 前天 19:22 | 显示全部楼层 |阅读模式
本帖最后由 smallwood 于 2024-10-16 19:24 编辑

这个新设计的串口,类似UART单线,能节省高达85%传输时和几十Mbps速度,目前在github开源,大家如何看,用得着吗?

https://github.com/maxmklam/VARIABLE_SERIAL_PORT

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出40入518汤圆

发表于 前天 19:38 | 显示全部楼层
85%只是max而已吧?AVG多少?就是压缩了吧,接收端也需要解码,
对于常规采样数据(例如音频),用ADPCM压缩都可以做到25%了吧(对应75% saving)

出200入2554汤圆

发表于 前天 20:04 | 显示全部楼层
看了下数学期望,大致能到 45% 左右压缩效率。然而带来了一些不便:

a. 非标硬件,目前只能用其他硬件口模拟协议;
b. BMC 码导致系统最差需要承受 2x 波特率物理带宽,比如 100kbps 传输,实际需要不低于 200k 的物理带宽

如果只是为了压缩数据,用成熟的压缩算法来一下不香么,这又折腾硬件又折腾调制解调的。
当然如果能被选入电气标准,强制单片机必须支持,也是不错的

出110入0汤圆

发表于 前天 20:09 | 显示全部楼层
挺好的思路,使用非归零或者曼切斯特编码等方式很容易提高速度

既然有帧识别了,是不是就不太需要字节同步了,这个思路类似CAN或者I2C的帧头帧尾

出0入8汤圆

 楼主| 发表于 前天 21:27 | 显示全部楼层
智涅 发表于 2024-10-16 19:38
85%只是max而已吧?AVG多少?就是压缩了吧,接收端也需要解码,
对于常规采样数据(例如音频),用ADPCM压 ...
(引用自2楼)

是的,85%只是传送数值为0时的节省效率。根据Fig.1所示,传送0的节省效率最高(85%),其次是1,255,然后2,254..., 传送128时几乎没有节省(5%)。

出0入8汤圆

 楼主| 发表于 前天 21:46 | 显示全部楼层
t3486784401 发表于 2024-10-16 20:04
看了下数学期望,大致能到 45% 左右压缩效率。然而带来了一些不便:

a. 非标硬件,目前只能用其他硬件口模 ...
(引用自3楼)

是的,非标的东西,当然没有现成的硬件可用,能用原有的硬件模拟已算好了啊。example project用SPI+DMA来模拟发送,基本上速度能达到SPI,只是软件比较繁琐以及用多很多MCU资源。接收方面也是,用timer capture + DMA接收,可以接收不同协议数据,但STM32的定时器输入捕捉速度跟不上。本example中用STM32G030F6可以很稳定的达到4Mbps clock rate(2Mbps bit rate,因为BMC编码的问题)

短期内会尝试用FPGA implement,看速度能否跟得上。


出200入2554汤圆

发表于 前天 21:56 | 显示全部楼层
smallwood 发表于 2024-10-16 21:46
是的,非标的东西,当然没有现成的硬件可用,能用原有的硬件模拟已算好了啊。example project用SPI+DMA来 ...
(引用自6楼)

4M 时钟如果走标准 UART,可以到 4Mbps,在 8N1 格式下相当于 400kB/s.
然后走 VSP,编码导致只能走到 2Mbps,但是有大约 45% 的平均压缩率,这么算来也是 400-500kB/s.

速度 B/s 的提升不明显,但 BMC 一类编码提升了码流交流成分的比例,
的确更适合高频,或者物理层只通交流的场合(例如有NFC、隔离变压器)

出0入8汤圆

 楼主| 发表于 前天 21:58 | 显示全部楼层
Flyback 发表于 2024-10-16 20:09
挺好的思路,使用非归零或者曼切斯特编码等方式很容易提高速度

既然有帧识别了,是不是就不太需要字节同步 ...
(引用自4楼)

字节同步用该3个唯一的marking:"开头,中间,结尾"就可以识别不同长度的帧了,也因此能做到传送较少bit数的帧,达到节省传输时间的效果。

是有点类似I2C的帧头帧尾,但多了一个中间marking “NF”

出110入0汤圆

发表于 前天 22:33 | 显示全部楼层
t3486784401 发表于 2024-10-16 21:56
4M 时钟如果走标准 UART,可以到 4Mbps,在 8N1 格式下相当于 400kB/s.
然后走 VSP,编码导致只能走到 2M ...
(引用自7楼)

的确,相位编码损失了一部分带宽,又通过不定长位编码把损失的带宽找回来,相当于在不损失带宽的情况下增加了时钟同步能力,这点来看是挺好的。

出0入8汤圆

 楼主| 发表于 昨天 11:33 | 显示全部楼层
t3486784401 发表于 2024-10-16 21:56
4M 时钟如果走标准 UART,可以到 4Mbps,在 8N1 格式下相当于 400kB/s.
然后走 VSP,编码导致只能走到 2M ...
(引用自7楼)

VSP速度因BMC编码导致减半没错,但UART却不是有4M时钟就可以跑4Mbps,因异步信号原因需要oversampling,在STM32系列UART的oversampling是8或16,即是说64MHz的UART时钟下,UART的码速最高只能跑64/8=8Mbps,但SPI码速能达到SPI时钟的一半,就是64/2=32Mbps。

回到VSP,采用BMC自同步scheme理论上能达到SPI的速度,但严格来说是达不到的,只能接近,或在接收方面落墨,采用更好的算法才能达到SPI的速度。


以上并没有贬低UART的意思,只是在不同客观描述不同串口的特性和应用。UART有UART的好处,SPI有SPI的好处,VSP也有VSP的优点。但拿VSP来取代UART/SPI是没有的事,非标的东西如何能跟已是标准化、大量采用多年的东西比?哈哈

出715入1076汤圆

发表于 昨天 11:38 | 显示全部楼层
本帖最后由 dukelec 于 2024-10-17 12:36 编辑
smallwood 发表于 2024-10-17 11:33
VSP速度因BMC编码导致减半没错,但UART却不是有4M时钟就可以跑4Mbps,因异步信号原因需要oversampling, ...
(引用自10楼)



串口 oversampling 理论上可以做到 3 倍采样,见: https://github.com/dukelec/cdbus/issues/1

出200入2554汤圆

发表于 昨天 12:00 来自手机 | 显示全部楼层
smallwood 发表于 2024-10-17 11:33
VSP速度因BMC编码导致减半没错,但UART却不是有4M时钟就可以跑4Mbps,因异步信号原因需要oversampling, ...
(引用自10楼)

我指的是对物理传输层带宽的消耗。

cpu端一般性能过剩,时钟速率基本够用; 传输层受限于收发器、线缆寄生参数,很容易带宽吃紧

出0入228汤圆

发表于 昨天 12:04 | 显示全部楼层
rp2040处理这些方便。
不过感觉最多做个自定义的设备间协议,肯定没有普及性

出0入8汤圆

 楼主| 发表于 昨天 12:44 | 显示全部楼层
dukelec 发表于 2024-10-17 11:38
串口 oversampling 理论上可以做到 3 倍采样,见: https://github.com/dukelec/cdbus/issues/1 ...
(引用自11楼)

大多数芯片的UART也只能做到8倍/16倍采样,师兄的CDBUS能做到只用3倍采样还能和不同时钟系统的UART稳定运行是很厉害了,不知道师兄的在接收方面有没有比较advanced算法?

出0入8汤圆

 楼主| 发表于 昨天 13:01 | 显示全部楼层
本帖最后由 smallwood 于 2024-10-17 13:30 编辑
t3486784401 发表于 2024-10-17 12:00
我指的是对物理传输层带宽的消耗。

cpu端一般性能过剩,时钟速率基本够用; 传输层受限于收发器、线缆寄 ...
(引用自12楼)


同意。的确,信号传输速率非常受收发器、线缆寄生参数、传输线的影响,纵然SPI能支持很高频率,但PCB传输线设计跟不上也是枉然。需要消耗多一倍的物理层带宽是所有BMC、Manchester编码的通病,有得必有失,这无解。

但就只比较同步系统/自同步系统和异步系统来说,同步系统/自同步系统能轻易上7、80MHz甚至更高,异步系统去到2、30MHz已经吃不消了,或者对收发双方的时钟系统精度要求很高。所以,在CPU时钟频率过剩、物理层带宽充沛的情况下,我认为BMC编码额外消耗一半带宽也比UART的NRZ编码要好了

出0入8汤圆

 楼主| 发表于 昨天 13:15 | 显示全部楼层
本帖最后由 smallwood 于 2024-10-17 13:21 编辑
wxws 发表于 2024-10-17 12:04
rp2040处理这些方便。
不过感觉最多做个自定义的设备间协议,肯定没有普及性 ...
(引用自13楼)


没有普及性是肯定的,就是做个自定义的设备间协议,在没有适合的UART、SPI、I2C串口可用/适合用的情况下用用。有时候坛友说用GPIO bit-banding方式软件模拟一些UART、SPI、I2C来用,这时候就可以试试用VSP,说不定会发现比纯粹用GPIO bit-banding方式软件模拟好用。但严格来说目前的VSP example project也是采用某种方式的GPIO bit-banding来做的,只不过额外支持了DMA,令看起来不太像GPIO bit-banding软件模拟罢了,哈哈。

后面会尝试基于VSP做一些比较advanced的功能,希望有坛友能用得着

出715入1076汤圆

发表于 昨天 13:31 来自手机 | 显示全部楼层
我就普通的 3 倍采样而已,不复杂

你这个数据里面虽然包含时钟,但是没有类似 usb 的 SOF 一串 0 1 跳变,也很难设计高效的接收硬件吧,最终又回到串口的 oversampling 方式接收

usb 和 ethernet 开头一串 0 1 序列,目的是让 pll 先锁相,后面数据里面的跳变用来微调修正 pll

usb 是 6 个连续 1 要插一个 0
uart 8N1 是含开始位连续 9 个bit
随着硬件工艺的升级,我觉得 uart 的 9 位也不算长(对时钟准确度的要求来说)

顺便说一下,CDBUS 跑 50Mbps 很轻松,还可以更高

你这个优化完了需要 ASIC 的话我可以带路

出0入8汤圆

 楼主| 发表于 昨天 14:18 来自手机 | 显示全部楼层
dukelec 发表于 2024-10-17 13:31
我就普通的 3 倍采样而已,不复杂

你这个数据里面虽然包含时钟,但是没有类似 usb 的 SOF 一串 0 1 跳变, ...

(引用自17楼)

3倍采样还能轻松运行在50Mbps以上,简直颠覆了我对UART异步系统的认知,师兄太强大了啊👍👍👍
前段时间一直忙没时间关注CDBUS,后面一定要试试!

老实说我还没有仔细想过VSP的硬件如何设计,可能是收发两边先约定频率,然后接收方利用每次边缘trigger微调频率。

我对FPGA和ASIC也只有一点点的认识,虽然20年前在芯片公司呆过以及曾经用xilinx设计过一个简单的硬件接口,但现在基本上已经忘得七七八八了。如果师兄肯帮助我那真是太好了,先感谢了🙏🙏

出0入0汤圆

发表于 昨天 14:31 | 显示全部楼层
高速通讯已经有以太网了,还折腾这串口干啥

出0入8汤圆

 楼主| 发表于 昨天 14:45 | 显示全部楼层
modbus 发表于 2024-10-17 14:31
高速通讯已经有以太网了,还折腾这串口干啥
(引用自19楼)

电工就要不断的折腾啊,不然就好像坛友一样找不到生活的意义了  说笑而已,有选择我也不想折腾这折腾那的,也想多些时间享受生活,我还支持了坛友倡议的线下联谊活动呢 https://www.amobbs.com/thread-5798186-2-1.html
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-18 22:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表