【小牛电动车研究一】关于小牛V35中控专用协议总结
一名法学生
2024年10月17日 23:59
小牛电动车

版权为一名法学生所有,转载请注明出处。

前言

小牛电动车的智能开关机服务需要每年缴费58元,实属二次消费,花了4000多元买的严格按照新国标的标准生产的mqis已经让我很不爽了,25km/h的限速、15km/h的滴滴声音。(这不怪卖车的,而是设定这个标准何不食肉糜的人)

大概在5月份左右,由于长时间没骑中控亏电系统初始化了,我就去小牛的实体店用H1处理了一下新国标的问题,如果再出现初始化我又得去,实在是太麻烦了,心里埋下了要自己逆向解决这个问题种子。恰逢10月国庆,种子发芽了。开动!

我先看到了这篇文章∶《小牛电池协议逆向》,里面的内容我就不赘述了,大家可以自己看看。在这里面我看到了小牛电池检测协议的软件-BMS monitor V0.47 - Niu,顺藤摸瓜找到了BMS monitor V1.7 - Niu(功能更齐全可以查电池充电日志与修改电池内置时间以及电池序列号)与V3LTE_R_ECU单片机升级V1.1(功能有给V35中控配钥匙软件、给中控升级、复位中控单片机)。期间经历了不小心点了复位中控单片机、刷固件修复、C35网络模块(联发科主心片)修复等事情,现对已知内容做如下总结(吐槽一下:网上现在一搜大多都是维修广告短视频,没啥真正教东西的内容)∶

小牛V35中控协议

如何连接实验

485连线方式如图所示。

软件:串口调试工具

硬件:USB转RS485,4元左右别买贵了!(淘宝一堆)

485通用协议

在传统的485协议中大多采取modbus-RTU数据协议传输内容,其中包括设备地址、功能码、数据长度、数据内容、校验码。

小牛专用协议

按照基本都设计逻辑,小牛的专用协议也会循序设备地址、功能码、数据长度、数据内容、校验码的逻辑。因为要给一个设备发信息,你先得告诉处理器给谁发。

以下是目前分析出来的小牛专用协议格式(十六进制)∶

68 设备地址 设备地址异或校验码 68 功能码 数据长度 累加校验 16

其中设备地址列表如下∶

中控∶40

仪表∶10

电池∶31

控制器∶20

功能码如下∶

设置∶01,回应数据81

查询/读取∶02,回应数据82

写数据∶04,回应数据84

配置系统∶06,回应数据86

在关于《小牛电池协议逆向》一文中有提到回应的字段需要减去0x33得到的才是可以进一步分析分析的数据。于是我根据已有的软件发送的命令写了一个批量测试命令的脚本,现得出有用的数据协议如下∶

//【仪表】 //设置仪表内容: //命令: 68 10 EF 68 04 |0F(数据长度)| 35(仪表最上牌的灯动能回收等) | 23 (是否定速续航23为没有,24为有) | 33(是否运动模式)| 33(速度)| 3C 4B 33(行使里程)| 33 33 33 |96(当前电量) | 33 | 3F 43(时间)| 33 71(从第0个开始累加校验位) 16(结尾标识) //回应: 68 10 EF 68 84 01 34 88 16 (显示到仪表盘的命令) //其中仪表盘上的灯的状态如下: //6D:ECO指示灯开启与动能回收开启-33=3A=0011 1010 //55:ECO指示灯开启 -33=22=0010 0010 //由于仪表盘需要的数据较为简单 //因此在设置中04后直接跟的数据长度 //然后直接从0位置开始写入数据,没有专门的地址起始位置字段 //【电池】 //查询电池内容: //命令: 68 31 CE 68 02 02 35(从第2个字节位置开始) 5E(获取94个字节数据) 66 16 //获取序列号 //命令: 68 31 CE 68 02 02 3C(从第9个字节位置开始) 43(获取67个字节数据) 52 16 //获取车辆开启后循环查询的单个电池电压等信息 //命令: 68 31 CE 68 02 02 60(从第96个字节位置开始) 6A(获取106个字节数据) 9D 16 //【控制器】 //获取FOC控制器额定电压 68 20 DF 68 01 01 38 09 16 //获取FOC控制器额定电流 68 20 DF 68 01 01 3C 0D 16 //【中控】 //将中控设置为主机模式: 68 40 BF 68 06 01 02 D8 16 //将中控设置为从机模式: 68 40 BF 68 06 01 01 D7 16 //读取中控版本信息号: 68 40 BF 68 02 08 74(固定询问方式) 33(询问位置) 74 34 74 35 74 36 7B 16 //重启中控: 68 40 BF 68 04 04 73 4B 37 33 FF 16

更多交流

欢迎大家继续测试小牛中控的485协议反馈结果,这里放出交流群欢迎大家加入:714943385

期间的故事

昂贵的学费与冷嘲热讽

不小心将中控单片机复位后,导出去找一些维修商家(某车学徒、某【一家维修店】、某宁九牛车业-xx)想买个固件刷一下,得到的要么狮子大开口,张口就是2000,要么就是你买不起、要么就是让你换中控。大家都要赚钱生活,无可厚非,但是不是以抢的形式进行。故将修复方式公布,有动手能力的朋友可以参考。

便宜的方案:可以买一个好的v35中控提取后,然后刷到中控固件坏了的中控里,然后再把中控卖掉。

v35中控固件的获取

1、用st-link等刷写stm32的刷写期插到v35中控上预留的swd接口上,然后打开STM 32 ST-LINK Utility (或者J-Flash等工具)读取固件并保存。

2、一些提取的教程:

用JLINK提取STM32固件​

用st-link提取STM32固件:blog.csdn.net/weixin_42822110/article/details/111400179

我将在第二篇【小牛电动车研究二】关于小牛V35中控硬解芯片一览中给大家在不拆开的情况下一览V35中控内部结构。

参考资料:

MTK(联发科)黑砖拯救(无法进入fastboot或recovery)​

小牛电动车提交的相关报告:https://device.report/beijing-niu-technology