zvs吧 关注:23,784贴子:520,745

【实验】关于 R4850G2 的 CAN 通讯协议

只看楼主收藏回复

一转眼间就是三年了,这次回到 Z 吧看看,多了好多新面孔啊
三年前,我发了个拆解华为 R4850G2 的帖子(https://tieba.baidu.com/p/5568795188),并扬言「要是能搞到它的通信协议才好玩」
几天前我突然想起这事,参考了诸多国内外论坛上关于 R4850G2 的帖子、华为官方的手册,并加上我自己的一些分析和猜测,发现了 R4850G2 CAN 总线的一些玩法和功能,在此帖中一一实验并记录下来,以示后人
咱二楼开始


IP属地:四川来自Android客户端1楼2021-08-02 15:37回复
    不了解 R4850G2 电源的吧友,可以看一下我之前拆机的那个帖子。这里仅仅简单地介绍一下它。R4850G2 是华为制造的一款通信电源,标称 53.5V 56.1A。在当年因为低廉的二手价格和它优异的性能、严谨的做工在 DIY 圈非常受欢迎。电源有两个版本,在主拓扑和 PFC 部分有些许区别,一个版本是三相交错 LLC,另一个版本是普通 LLC。


    IP属地:四川来自Android客户端2楼2021-08-02 15:39
    回复
      这是 R4850G2 的尾部接口部分,除了必要的市电输入以及直流输出端口外,还有四个较细的金手指(有两个在背面),其中左侧上下两个金手指是 slot detection(槽位检测),右侧上下两个金手指就是 CAN 总线的 CANL 和 CANH 了


      IP属地:四川来自Android客户端3楼2021-08-02 15:51
      回复
        在真正谈及 CAN 之前,我们先来说说这个电源的 slot detection。我们暂且把上面的槽位检测金手指记为 SLOT_1,下面的记为 SLOT_2。
        lz 有幸搞到了一块 R4850G2 的尾插电路板,经过简单地抄板研究,画出了关于槽位检测部分的电路。其中所有标记 SW 开头的节点都连接到了一个 DIP8 拨码开关,SWx_A 和 SWx_B 连接到第 x 个开关的两端。VCC 直接取了 R4850G2 的 53.5V 输出。(实际上这个电路在我之前一篇帖子里发布过,不过当时那个电路画得非常混乱,这个是重新检查+整理之后的版本


        IP属地:四川4楼2021-08-02 16:00
        收起回复
          简单地分析一下这个电路:
          R4, R5, R6, R3, U1 构成一个基于 TL432(电气特性与 TL431 基本相同,但有些厂商的 TL432 基准电压为 1.25V)的稳定电压源,然后接到一个电阻分压网络上,最后分压器的输出接到 R4850G2 的 SLOT_1。
          若 C13 两端电压为 Vm
          R6, R3 构成基本的分压器,根据分压器的特性,可知 TL432 1 脚电压 Vref' = Vm * R3 / (R6 + R3)
          根据 TL432 的特性,其 1 脚电压 Vref = 2.5V
          明显 Vref=Vref',可得 Vm = Vref * (R6/R3 + 1) = 27.5V
          也就是说这里用 TL432 构造了一个稳定在 27.5V 的电压源,这为后面的电阻分压网络提供了基本的固定电压。


          IP属地:四川5楼2021-08-02 16:14
          回复
            拨码开关可以选择性地短路掉分压网络中的一些电阻,在输出端获得不同的电压。实测这个电压最大值为 2.8V(拨码开关全部断开),最小为 0V(拨码开关全部闭合)。
            而 SLOT_2 端则直接通过一个电阻接到输出负极了,到底 slot detection 对这个电源来说意味着什么,以及这些拨码开关究竟在设置什么,lz 也暂时不清楚
            唯一已知的是,SLOT_1 和 SLOT_2 必须被拉低到一定电压(0V 都可以)电源才会启动。


            IP属地:四川6楼2021-08-02 16:22
            回复
              ok 咱正式来看看神秘的 CAN 协议部分。
              测试环境 lz 使用了一块 MCP2515 芯片作为 CAN 收发器,配合 Arduino Uno 连接到电脑上观察 CAN 总线上的数据传输。电脑端用的 Linux 系统,用安装了 PlatformIO 拓展的 VS Code 作为 Arduino 的 IDE(vscode 基于 clangd 的代码补全和智能提示比 Arduino 官方的那个破 IDE 强多了
              R4850G2 采用 125Kbps 速率的 CAN 总线,29 位拓展的 CAN ID。


              IP属地:四川7楼2021-08-02 16:29
              收起回复
                测试环境,别问为啥不是双绞线,问就是没有也懒得绕


                IP属地:四川来自Android客户端8楼2021-08-02 16:37
                回复
                  * 实验 I:仅读取 CAN 总线不发送任何数据
                  在上电瞬间,R4850G2 每间隔 131ms 以 ID:1000107E 发送了两条内容一样的报文:
                  30 01 24 68 63 60 06 69 [十六进制表示]
                  间隔 254ms,以同样的 ID 发送同样的报文,不过第二字节内容变成了 02
                  30 02 24 68 63 60 06 69
                  此后,每间隔 325ms 以 ID:1001107E 发送了 7 条一样的报文:
                  30 01 24 68 63 60 06 69
                  间隔 1931ms,再次以 ID:1001107E 发送了 1 条报文:
                  30 01 24 68 63 60 06 69


                  IP属地:四川9楼2021-08-02 17:07
                  回复
                    上述共 11 条报文,只看 ID 暂且不论其数据内容,我们可以归为一组报文,暂且称为报文组 PG_A。
                    接着, PG_A 再次出现,除了最后一条报文数据有变外,其它报文数据同 PG_A 第一次出现时完全一致。
                    最后一条报文数据变为:
                    00 02 00 00 00 00 00 00


                    IP属地:四川10楼2021-08-02 17:18
                    回复
                      接着,间隔 353ms,以 ID:100011FE 发送:
                      00 01 00 0x 00 00 00 00
                      接着每间隔 377ms 以 ID: 1001117E 发送 7 条报文:
                      00 01 00 0y 00 00 00 00
                      接着每间隔 16ms 再次以 ID:1001117E 发送一条报文:
                      00 02 00 00 00 00 00 00
                      把上述 9 条报文归为一组,暂且称为报文组 PG_B。
                      同时观测输出电压,发现当上电之后,发送 PG_A 两次,其中风扇开始运作,输出电压开始上升时正好对应 PG_A 第一次发送的最后一条报文。
                      当输出电压上升至设定值并稳定时,PG_B 开始被反复发送。


                      IP属地:四川11楼2021-08-02 17:55
                      回复
                        当市电输入被切断,PG_B 仍然继续发送,但此时输出电压开始下降,楼上描述的报文中的 x=y=1,正常情况下(具有稳定输出时)x=y=0


                        IP属地:四川12楼2021-08-02 17:58
                        收起回复
                          cy


                          IP属地:重庆来自Android客户端13楼2021-08-02 17:59
                          回复
                            明天继续更。明天咱来看看如何轮询电源的输出电压,以及调整输出电压、电流。


                            IP属地:四川14楼2021-08-02 22:23
                            收起回复
                              好家伙,失踪人口大回归


                              IP属地:广西来自iPhone客户端15楼2021-08-03 15:56
                              收起回复