目录
本文以市面上一款公板公模的畅销产品为例。K12蓝牙音响。
音响用的芯片是:AB5768E
MIC用的芯片是:AB5769A
硬件框架图如下:
1:Mic端:AB5769A
1.1:代码结构
首先找到Main入口函数,如上图,红框1中的基本都是库函数,不太需要关注。重点看红框2里的两个函数
bsp_sys_init():系统初始化函数
func_run():功能总入口函数
打开bsp_sys_init(),是一些具体的初始化实现:
1.2:xcfg_init()
xcfg_init(&xcfg_cb, sizeof(xcfg_cb)):获取配置参数函数
比较有意思的是,xcfg_cb这个结构体的初值,不是在代码里给的,而是直接在下载工具里配置的。看起来是傻瓜了不少,但是有点说不出来的味道,放代码里配置感觉更高大上一些。
打开下载工具-》配置,然后就看到上图的页面了,根据终端是Mic,还是音响选择进行配置,也就相当给xcfg_cb结构体赋初值了。
typedef struct __attribute__((packed)) _xcfg_cb_t {
u32 wireless_adapter_en : 1; //无线mic适配器
u32 wireless_mic_emit_en : 1; //无线mic发射端
u16 sys_off_time; //无连接时自动关机时间: 不关机: 0, 30秒钟后: 30, 1分钟后: 60, 2分钟后: 120, 3分钟后: 180, 4分钟后: 240, 5分钟后: 300, 6分钟后: 360, 7分钟后: 420, 8分钟后: 480, 9分钟后: 540, 10分钟后: 600, 15分钟后: 900, 20分钟后: 1200, 25分钟后: 1500, 30分钟后: 1800, 45分钟后: 2700, 1小时后: 3600
u32 poweron_first_bat_en : 1; //发射端第一次上电开机
u8 lpwr_warning_vbat_level; //低电提示电压: 0:不提示, 1:2.8V, 2:2.9V, 3:3.0V, 4:3.1V, 5:3.2V, 6:3.3V, 7:3.4V, 8:3.5V, 9:3.6V, 10:3.7V
u8 lpwr_off_vbat_level; //低电关机电压: 0:不关机, 1:2.8V, 2:2.9V, 3:3.0V, 4:3.1V, 5:3.2V, 6:3.3V, 7:3.4V, 8:3.5V, 9:3.6V, 10:3.7V
u32 vddio_sel : 4; //VDDIO电压: None: 0, 2.7V: 3, 2.8V: 4, 2.9V: 5, 3.0V: 6, 3.1V: 7, 3.2V: 8, 3.3V: 9, 3.4V: 10, 3.5V: 11, 3.6V: 12, 3.7V: 13
u32 buck_mode_en : 1; //BUCK MODE
u32 oscillator_26m_en : 1; //使用26M时钟源
u8 uosc_both_cap; //自定义OSC基础电容: 0:0PF, 1:6PF
u8 uosci_cap; //自定义OSCI电容
u8 uosco_cap; //自定义OSCO电容
u32 ft_osc_cap_en : 1; //优先使用产测电容值
char le_name[32]; //BLE名称
u8 le_addr[6]; //蓝牙地址
u32 bt_rf_pwrdec : 6; //预置RF参数功率
u32 bt_rf_param_en : 1; //自定义RF参数
u8 rf_pa_gain; //PA_GAIN
u8 rf_mix_gain; //MIX_GAIN
u8 rf_dig_gain; //DIG_GAIN
u8 rf_captune_vl; //CAPTUNE_VL
u8 rf_captune_vh; //CAPTUNE_VH
u32 mic_bias_method : 2; //MIC偏置电路配置: 单端MIC外部电阻电容: 2, 单端MIC内部电阻电容: 0
u8 mic_anl_gain; //MICM模拟增益
u8 mic_dig_gain_idx; //MIC数字增益
u32 led_disp_en : 1; //系统指示灯(蓝灯)
u32 bled_io_sel : 5; //蓝灯IO选择: None: 0, PA4: 4, PA5: 5, PA6: 6, PA7: 7, PA8: 8, PA9: 9, PA10: 10, PA11: 11, PA12: 12, PA13: 13, PA14: 14, PA15: 15, PB0: 16, PB1: 17, PB2: 18, PB3: 19, PB4: 20, PB5: 21, PB6: 22, PB7: 23, PB8: 24, PB9: 25, PB10: 26, PB11: 27, PB12: 28, PB13: 29, PB14: 30, PB15: 31
u32 led_pwron_config_en : 1; //开机状态配置LED
struct __attribute__((packed)) {
u8 redpat;
u8 bluepat;
u8 unit;
u8 cycle;
} led_poweron; //开机闪灯控制
u32 led_pwroff_config_en : 1; //关机状态配置LED
struct __attribute__((packed)) {
u8 redpat;
u8 bluepat;
u8 unit;
u8 cycle;
} led_poweroff; //关机闪灯控制
u32 led_btpair_config_en : 1; //蓝牙配对状态配置LED
struct __attribute__((packed)) {
u8 redpat;
u8 bluepat;
u8 unit;
u8 cycle;
} led_pairing; //配对闪灯控制
u32 led_btconn_config_en : 1; //蓝牙已连接状态配置LED
struct __attribute__((packed)) {
u8 redpat;
u8 bluepat;
u8 unit;
u8 cycle;
} led_connected; //已连接闪灯控制
u8 xm_keep_start[0]; //For Keep Area Start
u8 osc_both_cap; //产测OSC基础电容
u8 osci_cap; //产测OSCI电容
u8 osco_cap; //产测OSCO电容
} xcfg_cb_t;
(xcfg_cb结构体)