文章目录

  • 前言
  • 1、设计指标
  • 2、J1850协议
    • 2.1 J1850通信波形抓取
  • 3、外观设计
  • 4、原理图设计
  • 5、PCB设计
  • 6、程序设计
  • 7、调试
  • 8、大捷龙车机接口
  • 9、pin碟盒接口定义
    • 9.1、模块与10车机连接方法
  • 8、安装方法
  • 10、 使用方法
    • 10.1 CD车机按钮功能定义
  • 11、 联系我

前言

​ 之前写过三篇篇关于大众车机增加音频输入的方法。

1、07宝来经典车机CD收音机(RC668)改装增加蓝牙播放音乐

2、全网首发!老大众奥迪碟盒通信协议破解,可以模拟数码碟盒,外接AUX蓝牙U盘等音频设备

3、全网首发!大众奥迪DIY数码碟盒增加USB和蓝牙播放音乐功能使用原车接口无损改装

​ 这回是一大捷龙车主和我讲了他们老车没有蓝牙的痛苦,热情邀请我帮他们美系克莱斯勒老车机增加蓝牙和USB。车主是个十分好豪爽的人,所以就答应了他。车主很快将他车上的车机和10碟发给我。但是由于疫情和工作影响断断续续弄了1个多月,功能基本完成。可以实现如下功能。

1、支持蓝牙或者U盘播放音乐

2、支持原车按钮控制

3、可以接挂电话

4、走得是原车碟盒通道可以实现高品质音乐

1、设计指标

模块规格如下:

输入电压 11V-14.6V/DC
工作电流 200mA
工作温度 -40℃~+80℃
信噪比 95dB
频率响应 20HZ-20KHZ

2、J1850协议

​ 早期美系车型基本都是采用单总线J1850VPW协议的,大捷龙主机和碟盒之间的通信就是通过J1850协议实现的。所以破解传输的内容就可以虚拟出一个数码碟盒出来。下面介绍来自百度百科。

​ 1850总线是1994年由汽车工程师协会(Society of Automotive Engineers;SAE)所颁布的标准,之后普及运用于美国车厂的汽车中,如福特(Ford)、通用汽车(General Moter;GM)、克赖斯勒(Chrysler)等,虽然美国车厂多实行J1850标准,但各厂的实际作法各有不同,Ford的实体层设计与GM、Chrysler不同,而GM与Chrysler的实体层虽相同,但更上层的讯框格式却不同,等于3家车厂有3种协定。 [1]

​ 在J1850总线上,消息以数字信号形式的传输,数字信号的显性位优先级高于隐性位优先级。当总线被高优先级的消息占用时,低优先级的消息被停止发送,只有当总线空闲时被停止发送的消息才能被再次发送,这是为了避免总线上消息冲突而导致消息的丢失。在判断是否应该接收总线所传输的消息时,J1850协议采用全帧比较的方式,即从帧起始位开始一位位进行比较,直到帧结束为止。此方式不会破坏帧结构和内容,这种非破坏式冲突解决的方法也是该协议的核心。J1850协议没有严格地定义可能出现的帧错误。但是,它采用CRC校验法则来检测错误帧。当发送站点检测到自己发送的帧信息出现错误时,它会自动中断发送过程。而接收此消息的站点收到这个错误帧时会完全抛弃该帧。 J1850 应用层主要用于操作信息提示和故障诊断。SAE已经进一步扩充了该协议,并把扩充部分写入J2178协议之中。

​ 就车用电子的总线分类而言,J1850属于B级(Class B)的总线,B级总线的速率约在20kbps~125kbps间,较此更低速的为A级总线,速率低于20kbps以下,最知名的即是LIN Bus。B级总线的主要用途为车用信息中心、仪表显示、故障检测诊断等。由于J1850的实际运用混乱,因此有逐渐淘汰的趋势,预计最有可能用来取代J1850的是低速版的CAN Bus。

​ 如前所述,J1850有不同的实体层作法,一种是以脉宽调变(Pulse Width Moduleated;PWM)方式传送,运用2条线路以差动方式进行传输,最高速率为41.6kbps;另一种是可变脉宽(Variable Pulse Width;VPW)方式,此方式仅使用1条线路就可传输,最高速率为10.4kbps。

​ 在逻辑准位方面,J1850的高准位电压约在4.25V~20V间,而低准位电压则低于3.5V。要注意的是,1个高电压(或低电压)并不代表输出1个bit的信息,而是1个「bit symbol」,1个bit symbol最少可以携带1个bit的信息,但也可以更多,视调变作法而定。此外,每个Symbol的传递有其时间限制,以单线方式传输而言1个Symbol的传递时间为64微秒或128微秒。

​ 在实体线路上,J1850总线平时会连接1个微弱的下拉式电阻,当总线被驱动时则会将线路电压拉至高准位,拉至高准位的同时也等于取得总线的主导权、使用权。若发生争抢总线主导权的情形,则J1850使用CSMA/CR方式对争抢进行仲裁,以决定总线上某个节点有权先使用总线。

来自百度百科介绍

2.1 J1850通信波形抓取

​ J1850 VPW – 以数据位为基本单位进行传输,定义了一个起始位(SOF):200us 的高电平代表开始进行位传输,定义了一个结束位(EOF):280us 的低电平表示位传输正常结束,起始位之后的数据位表示方式可认为为:电平不断的翻转,每次产生一次翻转便产生一个新的数据位,这个数据位为“0”还是“1”由翻转时电平的持续时间来决定,数据位“0”用 64us 的低电平或 128us 的高电平表示,数据位“1” 用 64us 的高电平或 128us 的低电平表示。另在网络节点多的时候VPW 针对链路层定义了有效数据域结束位(EOD),帧间仲裁时间(IFS),多数据域时接收节点的应答就绪响应时间(IFR)如下图所示:

空闲时总线为低电平

使用逻辑分析仪抓取通信波形
起始位 SOF





毛刺

3、外观设计

​ 经过几天筛选找到了下面这个外壳 ,长x宽x高 = 6x4x2 CM 还算小巧,上面有一个按键孔和一个5mmLED孔,安排一些功能将这两个孔堵上,侧面是MINIUSB和10PIN牛角座。



4、原理图设计

根据J1850总线通信原理和上面抓取到的波形设计电平转换电路图。

5、PCB设计


​ 要想音质好,地分割隔离少不了,再打上多多的过孔,特批是射频部分一定要多打孔。

放上伪3D效果图。

6、程序设计

贴上核心程序代码

​ J1850的接收程序使用定时器2的捕获模式捕获边沿,J1850接收程序。

/*捕捉中断*/
void ETM2_IRQHandler(void)
{uint32_t nextVal;uint32_t curVal = ETM2->CNT;if(ETM2->SC & ETM_SC_TOF_MASK)                //清除溢出标志位{ETM2->SC &= ~ETM_SC_TOF_MASK;}if(ETM2->CONTROLS[0].CnSC & ETM_CnSC_CHF_MASK )//输入信号边沿变化{ETM2->CONTROLS[0].CnSC &= ~ETM_CnSC_CHF_MASK;if(RxInProgress == (VPW_RxStatus_t)Idle)                                                 // 产生下降沿{RxInProgress = (VPW_RxStatus_t)SOF;VPW_RxBufPtr = 0;
//            ResetRx();if(VPW_TxBufPtr >1){VPW_RxBufPtr = 0;}ETM2->CONTROLS[0].CnSC |= ETM_CnSC_ELSB_MASK;                                //切换到跳边沿检测}else if(RxInProgress == 1){uint32_t width;uint8_t symIdx;width = GetPulseWidth(PrevCntrVal, curVal);if(width > RX_SOF_MIN && width <= RX_SOF_MAX){symIdx = SOF_IDX;}else if(width > RX_LONG_MIN && width <= RX_LONG_MAX){symIdx = LONG_IDX;}else if(width > RX_SHORT_MIN && width <= RX_SHORT_MAX){symIdx = SHORT_IDX;}else{ResetRx();return;}VPW_RxBuf[VPW_RxBufPtr] = symIdx;if(TxInProgress == 1)                                      //正在发送{if(VPW_RxBuf[VPW_RxBufPtr] != VPW_TxBuf[VPW_RxBufPtr]){FinalizeTx();}}if(VPW_RxBufPtr < sizeof(VPW_RxBuf) - 2){VPW_RxBufPtr++;}SetTimerAlarm(239*48);}PrevCntrVal = curVal;}if(ETM2->CONTROLS[0].CnSC & ETM_CnSC_CHF_MASK )//输入信号上升沿{ETM2->CONTROLS[0].CnSC &= ~ETM_CnSC_CHF_MASK;}
}

J1850的发送程序使用定时器0产生波形

/*****************************************************************************//*!
*
* @brief ETM1 回调函数
*
* @param  none
*
* @return none
*
*****************************************************************************/
void ETM0_IRQHandler(void)
{uint32_t nextVal;ETM_ClrOverFlowFlag(ETM0);               //清除溢出标志位ETM_ClockSet(ETM0, ETM_CLOCK_NOCLOCK, ETM_CLOCK_PS_DIV16);       //停止计数nextVal = VPW_Symbols[VPW_TxBuf[VPW_TxBufPtr]];if((VPW_TxBuf[VPW_TxBufPtr] == EOF_IDX)||(VPW_TxBufPtr>=(TX_BUFLEN*8))){FinalizeTx();}else{ETM_SetModValue(ETM0,nextVal);ETM0->CNT = 0;ETM_ClockSet(ETM0, ETM_CLOCK_SYSTEMCLOCK, ETM_CLOCK_PS_DIV16);      //开始计数GPIO_Toggle(GPIOA,J1850_OUT_MASK);}VPW_TxBufPtr++;}

定义结构体 用于保存车机播放音乐相关信息。

typedef struct
{uint8_t rnd;uint8_t scan;uint8_t playing;uint8_t cd_button;uint8_t cd_power;uint8_t cd_status;uint8_t disc;           uint8_t track;          uint8_t minute;         uint8_t second; uint8_t workSta;                   // 工作状态0  关机 1 待机 2工作uint8_t BIDIstate;                       // pointer to the current state handler routineuint8_t BIDIcount;uint8_t staCount;} CD_CHANFER_STRUCT;

7、调试

插上模块抓取数据分析包 抓到如下数据包 根据测试结果调试程序

[16:42:44.875]收←◆63 70 de —

[16:42:46.330]收←◆63 70 de —

[16:42:46.682]收←◆8d 92 c0 0 0 +++

[16:42:47.787]收←◆82 6d 3f ff ff —

[16:42:48.618]收←◆36 58 0 3 f8 —

[16:42:49.259]收←◆8d 90 0 3 f8 —

[16:42:49.369]收←◆ —

[16:42:50.746]收←◆8d 93 0 0 7 —

[16:42:50.873]收←◆8d f 21 +++

[16:42:51.642]收←◆36 4c 3 78 68 —

[16:42:52.233]收←◆8d 93 0 0 50 +++

[16:42:53.145]收←◆8d f 24 +++

[16:42:54.648]收←◆8d f 24 +++

[16:42:55.193]收←◆8d 93 0 0 50 +++

[16:42:56.140]收←◆8d f 0 0 50 —

[16:42:56.680]收←◆8d 93 0 0 50 +++

[16:42:57.640]收←◆8d f 24 +++

[16:42:58.153]收←◆8d 93 0 0 50 +++

[16:42:59.144]收←◆8d f 24 +++

[16:42:59.640]收←◆8d 93 0 0 50 +++

[16:43:00.647]收←◆8d f 24 +++

[16:43:01.127]收←◆8d 93 0 0 50 +++

[16:43:02.150]收←◆8d f 24 +++

[16:43:02.615]收←◆8d 93 0 0 50 +++

[16:43:03.655]收←◆8d f 24 +++

[16:43:04.086]收←◆8d 93 0 0 50 +++

[16:43:05.144]收←◆8d f 0 0 50 —

[16:43:05.574]收←◆8d 93 0 0 50 +++

[16:43:06.617]收←◆ +++

[16:43:08.151]收←◆8d f 24 +++

[16:43:08.517]收←◆8d 8f 24 —

[16:43:09.653]收←◆8d f 24 +++

[16:43:10.005]收←◆8d 93 1 —

[16:43:11.157]收←◆8d f 24 +++

[16:43:11.477]收←◆8d 93 1 0 70 —

[16:43:11.973]收←◆8d 93 1 0 80 —

[16:43:12.660]收←◆8d f 24 +++

[16:43:12.965]收←◆8d 93 1 0 80 +++

[16:43:14.148]收←◆8d f 1 0 80 —

[16:43:14.452]收←◆8d 93 1 0 80 +++

[16:43:15.652]收←◆8d f 24 +++

[16:43:15.924]收←◆8d 93 1 1 80 +++

[16:43:16.195]收←◆8d 94 0 0 +++

[16:43:17.155]收←◆8d f 24 +++

[16:43:17.412]收←◆8d 93 1 1 80 +++

[16:43:18.195]收←◆8d 94 0 2 +++

[16:43:18.659]收←◆8d f 24 +++

[16:43:18.899]收←◆8d 93 1 1 80 +++

[16:43:19.171]收←◆8d 94 0 3 +++

[16:43:20.162]收←◆8d f 24 +++

[16:43:20.387]收←◆8d 93 1 1 80 +++

[16:43:21.171]收←◆8d 94 0 5 +++

[16:43:21.666]收←◆8d f 24 +++

8、大捷龙车机接口

9、pin碟盒接口定义

AUDIO R 右声道 AUDIO L 左声道
AUDIO GND 模拟GND GND 数字GND
SHIELD 未用 SPARE 未用
J1850 数据总线 PWD 未用
ACC 点火 BATT 12V 电源

9.1、模块与10车机连接方法

车机与模块引脚连接对应关系表

模块引脚 车机引脚 模块引脚 车机引脚
L 6脚 左声道 R 1脚 右声道
AG 2 模拟地 AG 2脚 模拟地
IN 4 脚 J1850总线
HU 5脚 ACC开机信号
12V 10脚12V电源 DG 7脚

备注: 数字地和模拟地不能连接到一起

8、安装方法

1、将汽车停在安全地方熄火,拔下车钥匙;

2、根据实际情况取出汽车CD车机;

3、使用配套的线束或者根据上文接口定义自己DIY线束,通过线束将模块和车机连起来;

4、将数字地与车机外壳牢固搭铁;

5、插入钥匙打开钥匙 按车上(CD、CDC、DISC、SOURCE、SRC、MODE等按钮进入碟盒模式开始播放音乐;

6、调试没有问题后,如果不使用蓝牙,可以将模块放在车机的后方放回去,或者将模块放到手套箱中,自己喜欢放到哪都行。然后将车机放回即可安装完成;

注意:改装有风险,下手需谨慎,因车型的不同,难易程度不同,当你选择下手的时候,强烈建议找个老司机带你。

10、 使用方法

10.1 CD车机按钮功能定义

​ 大捷龙车机在进入CD模式后,只有SEEK+、SEEK-、FF、RW、DISC+、DISC-。这几个按钮可以使用。现在做以下映射

车机按钮映射表

车机按钮 模块功能
DISC+ 上一个文件夹播放
DISC+ 下一个文件夹播放
SEEK+ 上一曲/接电话
SEEK- 下一曲/挂电话
FF 蓝牙模式
RW U盘模式

​ 9.2 模块指示灯定义

​ 红灯为U盘蓝牙状态指示灯,蓝灯为模块运行状态指示灯。

指示灯状态表

灯闪烁方式 模块状态
蓝灯熄灭 不可以和车机通信
蓝灯快闪 可以和车机通信
红灯快闪 进入蓝牙
红灯常亮 连接成功
红灯慢闪 正在播放
红灯关闭 进入关机模式

状态改变说明表

条件 动作
正在播放音乐,此时连接蓝牙 音乐停止播放,进入蓝牙模式等待播放音乐
蓝牙模式,按下U盘模式按钮 开始播放音乐
蓝牙连接上,正在播放U盘音乐 蓝牙发出声音自动切换到蓝牙模式

测试视频

大捷龙蓝牙

大捷龙演示视频

11、 联系我

下面准备好了DIY套件,感觉动手吃力的朋友可以下单购买。

模块链接: 淘宝连接

升级服务

​ 产品定制升级

产品定制升级

​ 商务合作

​ 汽车电子开发

​ 电子产品开发

联系方式
请先加V沟通
VX : 15566031081
商务合作:15566031081

全网首发,克莱斯勒大捷龙jeep道奇DIY数码碟盒增加USB和蓝牙播放音乐功能使用原车接口无损改装相关推荐

  1. 全网首发克莱斯勒东南大捷龙jeep道奇DIY数码碟盒增加USB和蓝牙播放音乐功能使用原车接口无损改装

    文章目录 前言 碟盒功能 1.设计指标 3.外观设计 4.PCB设计 5.程序设计 6.调试 7.大捷龙车机尾插接口定义 公头东南大捷龙车机白色插头 模块与白色插头连接方法 8.安装方法 9. 使用方 ...

  2. 全网首发,大众奥迪领驭帕萨特DIY数码碟盒增加USB和蓝牙播放音乐功能使用原车接口无损改装

    文章目录 全网首发!大众奥迪DIY数码碟盒增加USB和蓝牙播放音乐功能 前言 1.设计指标 2.方案设计 2.1.外壳选择 2.2.蓝牙方案 2.3.MCU方案 3.原理图设计 4.PCB设计 5.程 ...

  3. 全网首发!老大众奥迪碟盒通信协议破解,可以模拟数码碟盒,外接AUX蓝牙U盘等音频设备

    文章目录 前言 什么是碟盒? 碟盒接口定义 车机与碟盒之间的通信协议 主机向碟盒发送数据协议 数据帧格式 逻辑分析仪真机抓包分析 起始信号波形: 数据0信号波形: 数据1信号波形: 逻辑分析仪抓包分析 ...

  4. 07宝来经典车机CD收音机(RC668)改装增加蓝牙播放音乐

    最新教程模拟碟盒通破老大众全系列 https://blog.csdn.net/songisgood/article/details/111869214 全网首发!大众奥迪DIY数码碟盒增加USB和蓝牙 ...

  5. 全网首发,自制ADK To Win11PE(1)中文+包

    当时发布的时候B站.无忧等等论坛也没有做出Win11PE,因此标题全网首发 Win11PE初步定制 一.安装ADK 1.安装部署工具 2.安装winpe加载项 二.用微软官方部署工具创建基础PE 1. ...

  6. 中柏ezpad4s_699元快抢 中柏EZpad4s时尚版全网首发

    原标题:699元快抢 中柏EZpad4s时尚版全网首发 [ 来自IT168 ] [IT168 资讯]对于众多关注中柏10.6寸EZpad4s时尚版双系统平板电脑的消费者来说,在经历了短暂而又漫长的半个 ...

  7. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. [Python从零到壹] 十三.机器学习之聚类算法四万字总结全网首发(K-Means、BIRCH、树状聚类、MeanShift)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. [Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  10. PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))

    题目描述: 我们知道平凡的栈有几个操作: push(value) 将 value 压入栈 pop() 将栈顶元素弹出, 并返回这个弹出的元素. 现在我们想要在平凡栈的基础上实现以下几个操作: push ...

最新文章

  1. 对Java基本数据类型的再思考
  2. 【深度学习】Transfomer在文本处理上的应用(风格识别)
  3. RequestMapping || @RequestMapping 模糊匹配功能
  4. 用SHELL访问特定的URL
  5. linux mysql timestamp_MYSQL中TIMESTAMP类型的使用
  6. GPU代码修改成TPU代码
  7. 深入Java核心:JVM中的栈和局部变量
  8. c++语言中for循环语句,C++ 循环
  9. python学习笔记 day20 常用模块(六)
  10. 几种如何判断环境是否连上网方法,推荐最后一种
  11. jsoncpp解析json报文测试
  12. ELK 把date替换为logstash的@timestamp
  13. ezcad旋转轴标刻参数_激光打标机软件ezcad中菜单下的旋转角度标刻功能介绍及其操作设置...
  14. python播放音乐同步歌词_Python 歌词解析器 音乐与歌词同步播放
  15. oracle临时表空间占用率过高,ORACLE 临时表空间使用率过高的原因及解决方案
  16. 2019 WordPress免费收费中文主题推荐 强迫症患者的救赎
  17. C++:实现将华氏度转换为摄氏度
  18. 软件工程课程第二次任务——需求分析与原型设计
  19. Python预测股票走势
  20. String为什么要用equals而不用==?

热门文章

  1. 超实用的!南京南站最新停车指南来了
  2. PyAlgoTrade框架研究
  3. 《春秋·战国》大事年表
  4. 物联网平台Thingsboard接入PM2.5数据实战
  5. CAJViewer安装报错卸载报错打开报错解决流程
  6. CPU的内部架构和工作原理(好文)
  7. C/C++编程:#pragma once用法总结
  8. 2014年个人工作愿景
  9. Multiprocessing 学会多进程 (莫烦 Python 教程)笔记-4-进程池pool
  10. nvme SSD和sata SSD的对比