2016-02-05 16:44:47| 分类: 兴趣 (从我的网易博客复制)

  前段时间数码之家论坛上有人卖车机,可能是高尔夫7上升级了新导航,换下旧的单色屏车机,是德赛西威的,编号5GG 035 185,主要是不到30元还包邮,实在抵抗不住诱惑入手了一台。
  尾线啥的都好弄,从备件里找出接插件焊上线就搞定了,主要是该车机还需要有解码器,否则蓝牙、电话功能不能用,而且一个小时后会自动关机。当时觉得觉得一起买的太贵了,就从另一家店铺里买了个解码器,结果没注意看内容,竟然买回来不能用(卖家说有高速和低速两种,我的这种车机是高速的),在淘宝上一搜,比车机还贵不少,一气之下就准备自己做一个。
  开始先研究了下淘宝买的低速解码器,见图:

很明显用了一个单片机,不过不知道是什么型号,我看了下管脚,1和8脚是电源正负极。在我的印象中,STM是没有SOP8封装的,然后在用过的AVR、PIC、STC里回忆了一下,应该是PIC系列的。其他的部分应该是MOS管和二极管啥的,电路没看,应该不复杂。
  然后开始啃CAN协议知识,一边啃一边觉得CAN这个东西真是好,应该大力推广。先介绍下历史,CAN总线是汽车设备厂家bosch公司发明的,因为随着汽车里设备的增加,设备之间的连线也成几何级数的增加,bosch公司就发明了CAN,通过两根双绞线可以完成所有设备之间的互联,而且CAN天生就具有防冲突的功能,能够实现控制设备之间的高速通信。两个线分别是CAN+和CAN-,CAN+只有高电平和悬浮两种状态,CAN-只有低电平和悬浮两种状态,当发送0信号就是支配信号时,CAN+和-分别是高低电平,如果发送1信号,两个线处于悬浮状态,即释放信号。这样就算有多个设备同时发出不同的信号,也会由于只有支配信号起作用,不会出现其他总线的互相干扰或者烧毁器件的情况。
  CAN总线学习的差不多了,在淘宝上买了一个CAN收发模块(采用MCP2515和TJA1050),准备先做一个RS232转CAN的收发器,我给它启了个名字叫TTL2CAN。单片机用PIC18F1824,MCP2515的驱动在网上也是现成的,做起来很简单。主要碰到一个问题是单片机速度不够,当PC发送19200BPS的串口数据时,接收会丢数据,而此时已经用到最高32MHz的主频了,因此只能实现9600BPS的串口通信(用C写的,改用汇编可能会更快点,不过主要目的是能收发CAN数据,波特率不是很重要)。
  开始准备破解车机的协议,发现用PC连上TTL2CAN,发送各种数据尝试,发现车机都没有响应(其实此时离成功太遥远了),后调试程序,发现CAN发送总是失败,TXERR总是被置位。悲剧的是MCP2515也不提供详细错误的标识,于是开始到网上寻求帮助。百度里居然没有任何相关的有用的信息,只好想法google,终于在一个德文论坛上找到一段对话,大概意思是没有接收者就不能发送,因为CAN消息中有一个bit是接收方反馈的,如果总线上没有任何接收方,这个bit将会是1,表示没有响应,发送方就会认为没有一个接收方确认此消息,也间接表明发送的数据是无效的,因此反复重发。
  弄清这个原理,就好理解为什么市售的模拟器都没有用CAN控制器来做了,因为必须要同时模拟出发送和接收方的电平,因此必须得用单片机直接模拟电平信号,想到这里,我开始设计一个硬件电路,满足CAN总线对线路电平的需要。电路图大致如下,开始的时候用的是三极管,测试的波形惨不忍睹,0的时候还好,1的时候下降延时有100us左右,要知道500Kbps的CAN一个bit的时间才2us,后来调整了电路,换成MOS管基本符合要求了。Q1、Q2用的是N-MOS,Q3用的是P-MOS,随便型号,封装SOT-23就行。

  单片机的选型没什么悬念,我手里正好有PIC12F1822,也是8脚的,推测淘宝卖的低速模拟器用的就是这个,内置RC主频最高32MHz(8MHz的指令频率),如果要完成500Kbps,需要16个指令周期完成一个bit的发送。这个要求貌似比较简单,其实很难,C代码经过编译以后一个循环就10个周期了,还要先寻址字节,再寻址位,单片机内存总共就128字节,后来改变了思路,采用空间换时间的方法来解决。修改了延迟代码,用MICRO X IDE模拟时间隔正好2us。
  再后来就是反复调试,车机也一直无响应。期间还从国外网站上搜大众汽车的CAN_id列表,也都没有测试成功。就在准备放弃的时候,我坚持再进行一次测试,就是用我自制的模拟器,用我的TTL2CAN看能否收到,测试果然收不到,说明模拟器还是有问题,经过1天的思考,我用自制的示波器观察后判断问题还是在发送时序的代码上,后来发现问题是X IDE的stopwatch不准,如果把里面一个复位的选项去掉,显示的周期就是对的。我之前的代码实际上发送bit的间隔有22或者23个指令周期,后来耐心的调整汇编代码,终于实现16个周期的精准发送。
  看前后的波形就能发现差异还是很明显的,下面两个图中上面的是调整代码之前的波形,仔细看的话就会发现,高低电平的时长不一样。

下面这个是调整代码以后的波形了,不过发送的数据实际上是不一样的,所以波形差别很大。

  完成到这里,TTL2CAN已经可以正确的接收到模拟器发的报文了,最后再继续调试CAN模拟器,看车机是否有反应。
开始的时候用了网上搜的几个ID测试,没有反应,后来用穷举法进行测试,终于发现车机的蓝牙可以工作了,按键灯也有变化。随后慢慢减小ID的范围,终于确定了引擎工作的ID和亮度控制的ID,然后在慢慢测试其后的参数值,确定了具体的值。(具体的值我就不公布了,毕竟淘宝上众多的卖家还指望这个赚钱呢~)
这是最终完成的实物图,PCB是用雕刻机制作的(请无视焊工,我懒,从不清洗线路板),78L05前加了个稳压管,降低78L05的功耗。

  到这里,从开始动手做CAN模拟器已经经过半个月了,当自制的CAN模拟器启动了车机的蓝牙和按键灯光后,心里很是激动。有志者事竟成,这不仅仅是一句口号,当我们碰到问题或者困难的时候,不妨再坚持一下,不要放弃,也许很快就会峰回路转、柳暗花明。
  这次制作的难度很大,首先要学习CAN总线,自制收发器和模拟器,并且还要用模拟器破解车机的协议,应该超过一个重点大学毕业设计的难度了。总之,过年有新音响可以听了~

车机CAN总线模拟器的自制相关推荐

  1. A2B车载音频总线-车机音频麦克风阵列测试

    1.A2B介绍: 随音频是智能座舱的核心功能,涵盖车载音响.语音识别.e-Call.消噪及回声消除等应用,随着汽车智能网联化的发展,对音频的开发要求也越来越高,需要加入更先进.功能丰富的信息娱乐功能以 ...

  2. 远程调试在Linux车机中的应用

    导读 在软件开发过程中,调试是必不可少的环节,嵌入式操作系统的调试与桌面操作系统的调试相比有很大差别,嵌入式系统的可视化调试能力比桌面操作系统要弱一点.对于导航这种业务场景比较复杂的程序开发,可视化调 ...

  3. 奇瑞s61鸿蒙,数码提前曝光,奇瑞新能源 S61 将搭载华为鸿蒙车机系统

    数码2 影楼月 27 日消息 ? 此前华为一直强调,不会自己造车.华为轮值董事长徐直军去年多次表示,华为不造车,而是使能 " 造好 " 车.造 " 好车 ".现 ...

  4. 安卓导航车机root方法_远程调试在Linux车机中的应用

    导读 在软件开发过程中,调试是必不可少的环节,嵌入式操作系统的调试与桌面操作系统的调试相比有很大差别,嵌入式系统的可视化调试能力比桌面操作系统要弱一点.对于导航这种业务场景比较复杂的程序开发,可视化调 ...

  5. Android车机初体验

    /   今日科技快讯   / 继四月底.5月初连续减持京东健康价值超过4.4亿港元(约合3.76亿人民币)股票后,近日,刘强东又减持京东价值约2.79亿美元股票.约合人民币18.71亿元.减持前,刘强 ...

  6. Android 车机初体验:Auto,Automotive 傻傻分不清楚?

    原创作者:小虾米君 转载地址:https://mp.weixin.qq.com/s/3OL8boekmBId0UVU6amp8A WWDC 2022 上野心勃勃的 CarPlay 让不少车企感受了更多 ...

  7. automotive 安卓开发_谷歌首次提及「Android Automotive」,是安卓车机系统亮相前奏?...

    谷歌近日放出了Android 6.0 Marshmallow版本的兼容性测试纲要(ACDD,Android Compatibility Definition Document),如果细细阅读,你会意外 ...

  8. 车联网(智能车机)测试行业解决方案

    智能车机系统行业解读 汽车智能车机核心系统由信息系统娱乐系统(IVI系统).导航系统.智能网联系统.安全系统四个子系统组成,为用户提供信息娱乐.导航定位.安全监测.数据交互.云服务等多样性服务的综合性 ...

  9. Android 车机初体验: Auto,Automotive 傻傻分不清楚?| 开发者说·DTalk

    本文原作者: 小虾米君,原文发布于: TechMerger WWDC 2022 上野心勃勃的 CarPlay 让不少车企感受了更多可能,也让不少车企察觉到了危机. Google 亦在车机上早有布局,包 ...

最新文章

  1. Linux集群部署和ipvsadm命令的使用
  2. 基于空间数据库MongoDB实现全国电影票预定系统
  3. 怎么理解java面向对象_Java 面向对象理解?
  4. 引流虚拟主机和服务器,建站使用云服务器和虚拟主机 哪个更好?
  5. spring boot jar包替换报错之Unable to open nested entry 'BOOT-INF/lib/cache-api-0.4.jar'.
  6. CISCO IOS SLB服务器负载均衡
  7. MySQL数据以全量和增量方式,向ES搜索引擎同步流程
  8. python像素处理_用python处理图片实现图像中的像素访问
  9. 怎样成为一个优秀的领导?
  10. crontab 简介
  11. java面向对象特性_java面向对象编程三大特性
  12. WebSocket 详解 1
  13. MT4 CRM 源码
  14. 如何关闭Windows 1011自动更新
  15. 智能手机企业现状 行业发展趋势
  16. 【统计建模与R软件】第二章 R软件的使用 上机练习4 猴子吃桃 鸡兔同笼
  17. 又一次算法作业hhhhhh
  18. FPGA 视频处理中外部SDRAM的作用
  19. 握草!查询提升200倍,它难道想干掉传统数据库?
  20. 记录:mac和win共享磁盘(同一局域网)

热门文章

  1. mulesoft Module 7 quiz 解析
  2. 离散结构:基础:逻辑和证明(Discrete Structures :The Foundations: Logic and Proofs)(3)
  3. Android 小米手环睡眠数据获取(MiFit同步到GoogleFit获取)总结
  4. python获取最新微博_Python 获取新浪微博的最新公共微博实例分享
  5. EventLog查看
  6. Springboot项目中使用jasypt给配置文件中密码加密
  7. kaldi基础介绍(一)在说话人识别中的数据准备
  8. WWW22: CAUSPref_Causal Preference Learning for Out-of-Distribution Recommendation
  9. 基于嵌入式linux电子相册设计,用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发...
  10. 我在 GitHub 黑市买“水军”:一万颗 star 只要 4000 多元,人人都能“一夜爆火”...