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


    前言

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

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

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

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

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

    ​ 这回是给东南大捷龙车机增加蓝牙和USB。东南大捷龙是东南汽车和克莱斯勒合作生产的MVP商务车,年份大概在2007-2012年之间,之后就停车了。可以说是独一无二了。因为产量不高,所以姥姥不疼,舅舅不爱。配套的电子改装套件不是很多,听大捷龙车主反馈,没有蓝牙开车导航不是很方便,所以花了一段时间破解了碟盒协议,制作了一个虚拟碟盒解决车主痛点。
    在这里插入图片描述在这里插入图片描述

    碟盒功能

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

    2、支持原车按钮控制

    3、可以接挂电话

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

    1、设计指标

    在这里插入图片描述

    模块规格如下:

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

    3、外观设计

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

    4、PCB设计

    放上伪3D效果图。

    在这里插入图片描述在这里插入图片描述

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

    5、程序设计

    贴上核心程序代码

    /*捕捉中断*/
    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;
    
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    发送程序使用定时器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++;
    	
    	
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

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

    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 routine
    	uint8_t BIDIcount;
    	
    	uint8_t staCount;
    	
    	
    } CD_CHANFER_STRUCT;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    6、调试

    7、大捷龙车机尾插接口定义

    公头东南大捷龙车机白色插头
    序号名称序号名称
    16未知8
    15BATT7可能AC
    14NC6DGND
    13可能AC 与7脚相连5AGND
    12车机数据输出碟盒输入4左声道
    11碟盒时钟输出车机输入3AGND
    10碟盒数据输出车机输入2右声道
    9不知道1NC

    在这里插入图片描述
    在这里插入图片描述

    模块与白色插头连接方法

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

    模块引脚白色插头引脚模块引脚白色插头引脚
    L4 脚 左声道R2脚 右声道
    AG5或者3脚 模拟地AG5或者3 脚 模拟地
    IN12脚 数据输出CLK11脚 时钟
    HU可能是2脚?需要测试OUT10脚数据输入
    12V15脚 BATTDG6脚

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

    在这里插入图片描述

    8、安装方法

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

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

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

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

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

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

    在这里插入图片描述

    9、 使用方法

    9.1 CD车机按钮功能定义

    ​ 东南大捷龙车机在进入CD模式后,只有换歌旋钮、SCAN-、REP、RDM。这几个按钮可以使用。现在做以下映射。方向盘控制功能保留。

    车机按钮映射表

    车机按钮模块功能
    换歌旋钮顺时针旋转上一曲/接电话
    换歌旋钮逆时针旋转下一曲/挂电话
    SCAN蓝牙/U盘切换
    RDMU盘模式歌曲随机播放
    REP预留

    ​ 9.2 模块指示灯定义

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

    指示灯状态表

    灯闪烁方式模块状态
    绿灯常亮模块正常工作
    红灯快闪进入蓝牙
    红灯常亮连接成功
    红灯慢闪正在播放
    红灯关闭进入关机模式

    状态改变说明表

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

    测试视频

    国产大捷龙增加蓝牙U盘播放音乐测试视频

    11、 联系我

    看这个教程下面
    https://blog.csdn.net/songisgood/article/details/124646307?spm=1001.2014.3001.5501

  • 相关阅读:
    清空一下问题机器的ClickOnce cache
    Nuxt3 初学,基础配置,页面结构搭建,引入element
    YiShaAdmin:一款基于.NET Core Web + Bootstrap的企业级快速开发框架
    [Linux打怪升级之路]-环境变量
    查看iOS应用的ipa包构建版本6种方法
    深入理解Linux网络技术内 幕(八)——设备注册和初始化
    基于改进滑模、经典滑模、最优滑模控制的永磁同步电机调速系统MATLAB仿真
    β-环糊精/碳酸钙/聚氨酯/聚苯乙烯磺酸钠(β-CD/CaCO3/PUA/PSS)杂化微球的研究
    小黑子—Maven基础
    Redis集群配置
  • 原文地址:https://blog.csdn.net/songisgood/article/details/128086841