大众车机天宝187A Hack笔记

0×00前言

自从去年买了车,对汽车电子系统的兴趣就上来了。这不,前一阵子逛汽车论坛,发现了有网友将老版本的天宝车机被刷上了2017新帕萨特车机的系统,支持超级蓝牙和苹果CarPlay,百度CarLife等功能。

187A.png

没错,这台车机就是最近很火的天宝187A,据说被刷上去的新系统是属于天宝187B,而天宝187B是为在当时并未上市的2017款新帕萨特配备的。

187B.png

我瞧了一眼我车上的车机型号,和天宝187A零件型号一样,都是6RD035187A,但是我这台却是德赛的。一样的型号,却有两个制造商,这很有意思,就好比有一汽大众和上汽大众一样…

在网上查了一些相关资料,得知德赛187A运行WINCE系统,没有CarPlay功能和百度Life。天宝187A运行Linux系统,也没有CarPlay功能和百度Life。但是天宝187A可以刷187B的系统,天宝187A和187B的区别仅仅是DRAM内存大小和面板按键不一样。187A是256MB 内存,而187B是512MB内存。

这就产生了一个问题,有些网友刷了系统后启动时死机,但是换了512MB内存后就正常了。由于本人对硬件也有研究,因此决定买一台天宝187A来研究一下,至于德赛……先好好地在车上服役,暂时不去虐他了…

关于天宝这个公司,也许是我才接触汽车不久,之前没有听说过。德赛倒是听说过,专门做汽车导航机器的,也给大众代工车机。江苏天宝汽车电子有限公司(http://www.toppower.com),公司很低调,网站很简陋…看一下职位招聘,都招什么工程师,嗯,CAE工程师、项目工程师、电子工程师、制造工程师,就是没有软件系统工程师,那这机器软件哪来的?大众给的?外包的?此处留下疑问……

0×01硬件

接下来我准备详细分析天宝187A的硬件系统。我从咸鱼平台上买了一台没有刷过系统的天宝187A。拆机后看到了主板。

主板图片.JPG

主板背面.JPG

主板正面有很多芯片,首先看电源部分。电源由汽车蓄电池直接供电,汽车启动后就是发电机供电,因此输入电压应是12-14V大概这个范围。

首先电源经过了一个STPS41H100CGY,这是一个肖特基二极管,整流作用,不关心。然后有一些大电容,大电感,背面有一个SOT23-5封装的IC,难道是DCDC?由于这部分电路靠近功放IC,不想继续追究他,无非就是一些给功放IC供电的滤波电路或者开关电路。毕竟车机接的是蓄电池,功放IC是不可能一直工作的。

接下来会看到很多电源IC,小电感,还有很多1206封装的电容,这肯定是给CPU或其他芯片供电的部分。首先负责12V转5V供电的有两个芯片。TI德州仪器SSOP-10封装的TPS54260-Q1,IC丝印是5426Q。MAXIM美信QFN-28封装的MAX16984,IC丝印是16984RA。

TPS54260.JPG

TPS54260是一颗宽电压输入(3.5V-60V),2.5A电流的DCDC降压IC,在这里设计12V输入,5V输出,由于电感体积很大,大过其他几个电感,应该是主要供电。美信的MAX16984是设计给USB供电的,电流是2.5A,很高啊,看来是可以满足iPad2.1A充电的,设计的比较有良心……

MAX16984.JPG

往上看还有3颗电源IC,分别是两颗德州仪器QFN-16封装的TPS54388Q1,丝印5438Q,一颗安森美DFN-10封装的NCV896530,丝印是完整型号。

3PWRIC.JPG

TPS54388-Q1,2.95V-6V输入,3A输出。NCV896530,2.7V-5.5V输入,两路1A输出。其中一颗TPS54388-Q1负责5V转1.5V给DDR3内存供电,另一颗TPS54388-Q1负责5V转1.375V给CPU核心供电。NCV896530负责5V转1.8V和3.3V,应该是IO供电和外设供电。

靠近大插座附近有一个CAN PHY芯片,附近还有一颗电源芯片,丝印是BLW N EO,查不到具体型号,但是他附近没有电感,应该是一颗LDO降压芯片,测量结果是12V转3.3V,是给旁边这颗MCU供电的,这样大的压差使用LDO供电非常不明智…唯一的解释就是这个MCU功耗非常低,使用LDO设计上合理,成本上也合理…

ldo.JPG

分析了这么多硬件电源部分,感觉好无聊。其实在我看来分析一个系统是否成功,首先就要看他的供电设计,这部分是核心,供电设计的好不好,关乎整个系统工作是否稳定。另外,我没有看到高级电源管理IC,此处也是一个疑问,不过后面的分析可以解答这个问题。

接下来登场的是系统主要芯片。CPU是飞思卡尔(已被NXP恩智浦收购)公司的i.MX6DL,型号是MCIMX6S6AVM08AC。双核Cortex-A9,最高1G工作频率,内置2D/3D图形处理单元,具有1080p图像处理能力,支持丰富外设。看起来很强大的样子…

CPU.JPG

DRAM是南亚的NT5CB128M16FP-D1H,16位,256MB,DDR3,1.5V。

DRAM.JPG

闪存使用的是Spansion的ML02G100BHA00,256Mx8 NANDFLASH,3.3V。

NAND.JPG

还有一颗QFP-100封装的芯片R7F7010253,直接搜索这个型号其实只能得知他是一颗瑞萨设计的芯片,其实他有个代号是RH850,搜这个代号能找到更多的资料,还有开发工具,但是就是找不到datasheet。

MCU.JPG

瑞萨这家公司主要设计生产MCU微控制器,汽车领域是其主要业务。

经过后面结合软件部分的一番分析得知,这个MCU的作用其实是CAN通信、硬件身份信息(零件号,序列号)、电源管理。没错,电源管理,因为汽车通信网是CAN总线,因此这款机器的电源其实也是受CAN总线管理的。

由于缺乏这颗MCU更详细的datasheet资料,不能找到具体哪些引脚对应哪些功能,不过后来我还是找到了控制每个电源IC使能引脚(EN),以及CPU复位引脚(POR_B)所对应的引脚,这些后面结合软件部分再说。

主板背面还有2个芯片,一个是ANALOG亚德诺的ADV7182,负责倒车影像摄像头信号转换(AV转数字信号)。还有一个丝印是2313,查不到具体型号,看旁边的测试点,和I2C总线相关,作用不明…

背面IC.JPG

硬件就先讲到这,大家是不是以为我是一个硬件工程师?其实我只是个业余的…硬件不是我的本职工作,不过我给公司客串过硬件设计,做过一个小产品,从硬件电路设计,到PCB Layout,从MCU固件,到产测软件,都被我包了,公司小,又是做软件的,请个硬件工程师没必要,就让我上了…还好这个项目比较小,不然我真要累死…

了解了天宝187A的硬件组成,就方便了接下来开展Hack行动!

0×02调试串口

Hack一台硬件和软件公开资料并不多的主板,最好的入口点就是寻找他的调试接口。很多产品的主板在设计时都会将TTL串口,JTAG这种关键的接口在主板上以插针或测试点(TestPad)的方式引出来,这种方式很普遍,比如说常用的路由器,大部分路由器都引出了TTL串口,少部分还引出了JTAG调试接口;3.5寸/2.5寸硬盘主板背面是不是有2排测试点?没错,这也是串口和JTAG。

其实不局限于常见的这些产品,绝大多数产品,都会引出TTL或JTAG,这主要是为了方便生产和测试,一颗CPU或MCU芯片、或者FLASH芯片,在工厂SMT贴在主板上后,里面是没有程序的,程序怎么烧进去?这就需要TTL或JTAG接口来实现了,有些带USB接口的还可以从USB引导烧入。

串口和JTAG是生产测试所必须的接口,我想应该很少有人会把烧程序这个阶段放在SMT工艺前面,再说还有测试环节怎么办,盲测?不可能嘛……比如下面这张是从网上找到的硬盘主板和很常见的路由主板,上面都有TTL接口或JTAG接口。

硬盘.png

路由器.jpg

有些人没做过硬件开发,我在这里简单解释下什么是TTL和JTAG。

TTL串口他就是一个串口,TTL电平,基本都是3线,TX,RX,GND,相比RS232来说,控制引脚、状态引脚基本都是不使用的。这其实简化了串口的使用难度,方便了开发,一般开发人员仅使用一个USB转串口的小板就能完成与目标板的通讯。

串口主要用途就是打印日志,方便开发人员确定程序状态,或对目标板进行控制。例如可以查看引导程序日志,打断引导,执行烧写固件指令,上传临时程序到RAM等等。另外使用串口还可以登录Linux系统的终端shell进行操作等等。

JTAG接口是CPU调试接口,通常由TDITDO TCK TMS这4个主要信号组成,一些系统还有TRST信号,用于复位JTAG状态机,还有nSRST用于复位CPU等等。使用这个接口需要与CPU搭配使用的硬件调试工具,每个CPU厂商所使用的工具是有一些区别的。

JTAG接口用途广泛,他可以在CPU上电后就打断CPU的运行,并直接操作CPU寄存器。如果开发Bootloader,或者相关底层的工作,也需要用到JTAG。

在生产测试环节,JTAG还可以测试CPU是否正常工作,读写DRAM,判断DRAM是否正常工作,还可以将程序烧写入Flash。

由于JTAG调试接口过于强大,大部分情况下为了避免自己的产品被山寨,制造商都会在产测结束后禁用掉这个JTAG接口,方法是烧掉CPU里面的熔丝,这个接口就不起作用了。

接下来开始在主板上找TTL和JTAG,JTAG很好找,就在主板背面,有几个较大的测试点,标明了TDI TDO TCK TMS等字样,这些应该就是CPU的JTAG接口了。

187A_JTAG.JPG

但是JTAG熔丝很可能被烧掉了,JTAG接口估计是废的。主要还是要找到调试串口。虽然有找到一些标注了TXD RXD丝印的测试点,但是很遗憾,经过连接测试后,这些并不是CPU的TTL调试串口,系统上电后根本没有任何字符串输出。

187A_WrongTTL.JPG

难道这个主板在设计时没有引出TTL串口吗?这怎么可能,太愚蠢了吧…

由于这个主板测试点非常多,密密麻麻很多小测试点,根本没有丝印标注,难道TTL串口就隐藏在这些没有丝印标注的小测试点吗?在这么多测试点里找到串口TX和RX信号,这看起来像是不可能完成的任务!

mess_tp1.JPGmess_tp2.JPG

主板正面有两个没有焊接排线插座的焊盘,这两个排线插座都是18pin的,其中一个走线靠近瑞萨MCU,有可能是瑞萨MCU的产测接口。另一个排线插座顶层走线既不靠近CPU也不靠近MCU,但这并不意味着他没有在内层电路与CPU相连,这很有可能主CPU的产测接口。

J400_J701.JPG

但是很遗憾当时我并没有意识到这一点,我已经被密密麻麻的小测试点逼得抓狂了。接下来我甚至做了一系列现在想想觉得很愚蠢的事情,在此分享出来吧。

我在咸鱼上联系一位网友花废品价买了他一个报废的主板,为的就是拆CPU,寻找TXD,RXD的走线。我把主板上了热风枪拆焊台,把CPU吹了下来。

BGA_PAD.JPG 

寻找NXP的SDK开发资料,找到了一个参考板的电路图,得知调试串口极有可能是UART4,TXD是Pin_W5,RXD是Pin_V6。我根据Datasheet上的引脚图去找W5和V6,然后通过BGA过孔找到背面的过孔焊盘,把焊盘的阻焊漆刮了,飞线,连接USB串口,上电发现并没有任何信息。

难道厂商的UBOOT没有启用串口?或者配置了额外的引脚作为调试串口?因为找不到正确的调试串口Pin,我的研究一度陷入了停滞。

接下来,我从网上找来网友分享的187A升级包,里面有Uboot镜像文件,我上了IDA,对比SDK中的Uboot源代码,找到了配置调试串口的数据。

ROM:178013AC dword_178013AC  DCD 0x62C244 ; DATA XREF: sub_17801278+C8 ROM:178013B0 dword_178013B0 DCD 0x10000100 ; DATA XREF: sub_17801278+D4 ROM:178013BC dword_178013BC DCD 0x14640258 ; DATA XREF: sub_17801278+ECr ROM:178013C0 dword_178013C0 DCD 0x3716348 ; DATA XREF: sub_17801278+F4r 

通过分析uboot头文件mx6dl_pins.h中的宏定义,得出这就是头文件中定义的

MX6_PAD_DECL(KEY_COL0__KEY_COL0,      0x062C, 0x0244, 3, 0x0000, 0, 0)
MX6_PAD_DECL(KEY_ROW0__UART4_RX_DATA, 0x0640, 0x0258, 4, 0x0914, 3, 0)

对比datasheet,确定了串口4使用的确实是W5和V6。这就奇怪了,难道调试串口不是串口4?后来我又定位到了puts函数,然后进入putchar函数,发现写入的确实是串口4的寄存器……

uart4_tx_reg_putchar.png

现在已经可以从代码上确定,串口4就是调试串口,使用的引脚也确实是CPU的W5和V6,那为什么我在串口上看不到任何信息?

此刻我已经被密密麻麻的测试点、BGA过孔、没有任何符号的UbootIDA反汇编,折磨的想要放弃了。

过了几天,我觉得不服,钱不能白花,决定再战。我检查了Datasheet是否是这个型号CPU的Datasheet,仔细研究了BGA焊盘,过孔,走线,引脚图……等下,我看到datasheet引脚图上面写的是Bottom View!HOLYCRAP!我把这个图当作Top View来看了!

bottomview.png

怪不得,我之前找的引脚是错!的!我把图垂直翻转,然后右转,右转,对齐了PinA1,找到W5V6的过孔,刮背面过孔焊盘,飞线,上电……串口终于找到了!此刻成功激动的心情简直无以言表……

putty_ttl.png

后来我意识到那个18pin的排线插座极有可能引出了UART4,用表测了下,发现果然如此,那我之前的一系列行为岂不是很愚蠢……不过我又研究了这个18pin,发现他还引出了JTAG,USB Host。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值