搜索
bottom↓
回复: 16

SDQ单总线协议如何用STM32通过软件模拟实现(或者叫IDBUS协议)

[复制链接]

出0入8汤圆

发表于 2023-6-13 20:25:00 | 显示全部楼层 |阅读模式
SDQ协议,和1-wire协议类似,也是一个单总线协议,甚至时序上也有类似的地方。

但是现在LA抓取的波形分析,SDQ协议通信速率比较高,每个数据比特10us时间,低7高3逻辑0,低2高8逻辑1,外加一些break/stop等控制信号。

现在用STM32的定时器捕捉或者外部中断,都存在来不及处理数据的情况,想看看各位有啥办法可以软件模拟的方式来完成通信。



最后一个字节高电平时间比较长,是有一个stop信号。


SDQ主要用在苹果lightning接口通信上,也有一个使用SDQ的EEPROM可以参考,BQ2026,具体可以看TI的官网,但是协议和这个有有一点区别,速率也没有苹果的SDQ速度高。

https://nyansatan.github.io/lightning/  这是另一个帖子,可以参考较为完整的SDQ的协议描述

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2023-6-13 20:29:31 | 显示全部楼层
屏蔽中断,死循环处理都不行?这都不行就要给MCU提速啊

出0入89汤圆

发表于 2023-6-14 07:37:52 来自手机 | 显示全部楼层
定时器,比较,捕获,dma,用全应该可以

出0入0汤圆

发表于 2023-7-22 11:40:22 | 显示全部楼层
请问楼主最后解决了STM32捕获SDQ的问题了嘛

出0入8汤圆

 楼主| 发表于 2023-7-22 12:41:30 | 显示全部楼层
darthmike 发表于 2023-7-22 11:40
请问楼主最后解决了STM32捕获SDQ的问题了嘛
(引用自4楼)

已经搞定了,不过不是很完美

出0入0汤圆

发表于 2023-7-24 10:59:54 | 显示全部楼层
huangdog 发表于 2023-7-22 12:41
已经搞定了,不过不是很完美
(引用自5楼)

能细说请教下大概的实现思路嘛

出0入0汤圆

发表于 2023-7-24 11:01:56 | 显示全部楼层
huangdog 发表于 2023-7-22 12:41
已经搞定了,不过不是很完美
(引用自5楼)

我也是类似的问题,来不及处理下一位数据就来了,不知道怎么办好

出0入309汤圆

发表于 2023-7-25 21:19:52 | 显示全部楼层
这信号才100K,如果不上中断,从收到break开始就阻塞式查询,用定时器计时应该没有问题。我最近研究了一下USB PD的软件实现,40M时钟的51可以用C代码实现300K BMC的解码,如果是用汇编24M时钟也够了。这还是在外设匮乏的情况下纯软件的结果。
如果是32位MCU,那IO变化触发定时器内容用DMA往内存里写,代码检查内存里抓取的计时器数据。这样应该对CPU时钟要求很低,一边DMA抓数据,代码一边解析应该都可以。

出0入0汤圆

发表于 2023-7-26 09:19:44 | 显示全部楼层
iamseer 发表于 2023-7-25 21:19
这信号才100K,如果不上中断,从收到break开始就阻塞式查询,用定时器计时应该没有问题。我最近研究了一下U ...
(引用自8楼)

主要我试了定时器中断最快进出就得1Us了

出0入0汤圆

发表于 2023-7-26 09:24:45 | 显示全部楼层
iamseer 发表于 2023-7-25 21:19
这信号才100K,如果不上中断,从收到break开始就阻塞式查询,用定时器计时应该没有问题。我最近研究了一下U ...
(引用自8楼)

比如紧挨着的两个边沿,完全有可能只相隔不到2us,而光是IO口的读取+定时器的读取可能时间都超过了

出0入309汤圆

发表于 2023-7-26 16:06:10 来自手机 | 显示全部楼层
darthmike 发表于 2023-7-26 09:24
比如紧挨着的两个边沿,完全有可能只相隔不到2us,而光是IO口的读取+定时器的读取可能时间都超过了 ...
(引用自10楼)

你是不是用库进行的操作?试试直接读寄存器,没理由超过几个时钟周期。

出0入0汤圆

发表于 2023-7-26 18:30:17 | 显示全部楼层
iamseer 发表于 2023-7-26 16:06
你是不是用库进行的操作?试试直接读寄存器,没理由超过几个时钟周期。 ...
(引用自11楼)

不是,我直接赋值的IDR和定时器的CNT寄存器给一个数组缓存,就两句。用的STM32G070

出0入362汤圆

发表于 2023-7-27 15:28:31 | 显示全部楼层
先看能不能用uart模拟吧, 都是10个us, 低7高3那就是0xc0, 低2高8那就是0xfe. 两条线并联,开漏加上拉, 试试?

出0入0汤圆

发表于 2023-7-30 21:34:19 | 显示全部楼层
用树莓派的pico rp2040直接编写此时序的解码器,估计会很爽

出0入8汤圆

 楼主| 发表于 2023-7-30 21:37:01 | 显示全部楼层
国外确实是用树莓派写的,但是用STM32也是可以干的,我这边已经实现了

出0入8汤圆

发表于 2023-7-30 23:33:45 来自手机 | 显示全部楼层
100kbps资料接收用STM32G030卓卓有余了,我用pwm capture + dma功能,就可以解码超过4Mbps的BMC数据

出0入228汤圆

发表于 2023-7-31 04:00:59 来自手机 | 显示全部楼层
duxingkei 发表于 2023-7-30 21:34
用树莓派的pico rp2040直接编写此时序的解码器,估计会很爽
(引用自14楼)

2040确实好用。我今年项目上基本都用这款了。

干这种时序非常方便。用stm就是一个个定时器去凑,太累了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 14:30

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

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