SDK说明 ========================================= 2025年3月发布的 AD24N SDK 工程,SDK命名为 *AD24N-release_v1.0.0* ,其含义为: - AD24N:代表AD24系列芯片,例如AD242、AD245等 - v1.0.0:表示当前SDK版本号 .. image:: 0_sdk_name_introduce.png :alt: "新版本SDK名称说明" :align: center .. centered:: 新版本SDK名称说明 本章节分下面三个部分进行介绍: #. “:ref:`SDK工程选择`”; #. “:ref:`SDK相关配置文件`”; #. “:ref:`SDK工程裁切`”; ^^^^^^^^^^^^^^^^^^^^ .. _SDK工程选择: SDK工程选择 ################################ SDK一般会有以下工程: #. **voice_toy工程**:该工程有完整发声玩具功能,能实现解码、MIDI功能;同时将VM、按键、休眠应用在工程中;使用4 cache way,所以 **CPU指令运行效率最高**。 #. **voice_enhanced工程**:该工程包含voice_toy工程所有功能,使用2 cache way,**多腾出了8K RAM** 给开发使用,支持了完整的FAT文件系统驱动; #. voice_enhanced玩具应用篇,链接->”:ref:`voice_enhanced应用篇`“ 目前芯片支持的工程如下: ============== ================ ========== 芯片/工程 voice_enhanced voice_toy ============== ================ ========== AD24N √ √ ============== ================ ========== 如何进入对应工程: .. image:: pro_dir_voice_toy.png :alt: "voice_toy工程目录“ :align: center 下面介绍voice_toy工程占用的一些硬件资源 #. 芯片的串口使用情况: ============== =============== 芯片 AD24N UART0 √(作为打印) UART1 √(无使用) UART2 × ============== =============== #. 芯片的timer定时器使用情况: ============== =============== 芯片 AD24N ============== =============== TIMER0 √(无使用) TIMER1 √(无使用) TIMER2 √(红外按键) TIMER3 × ============== =============== #. 芯片的软中断使用情况: ============== ==================== 芯片 AD24N ============== ==================== IRQ_SOFT0 √(解码) IRQ_SOFT1 √(编码) IRQ_SOFT2 √(红外按键) IRQ_SOFT3 √(录音写数据) IRQ_SOFT4 √(未使用) IRQ_SOFT5 √(未使用) IRQ_SOFT6 √(未使用) IRQ_SOFT7 √(未使用) ============== ==================== #. 芯片的IO口(PA口类)使用情况: ============== ============================== 芯片 AD24N PA0 √ PA1 √(ADkey、唤醒口) PA2 √(SD卡CMD脚、矩阵按键) PA3 √(SD卡DAT脚、矩阵按键) PA4 √(打印) PA5 √(外挂flash片选口、矩阵按键) PA6 √ PA7 √ PA8 √(MCLR) PA9 √(触摸按键、红外按键) PA10 √(触摸按键、矩阵按键、外挂flash_di) PA11 √(触摸按键、矩阵按键、外挂flash_clk) PA12 √(外挂flash_d0) PA13 √ PA14 √ PA15 √(SD卡CLK脚) ============== ============================== #. 芯片的IO口(PB口类)使用情况: ============== ============================== 芯片 AD24N PB0 √(DAC输出口) PB1 √ PB2 √ PB3 √ ============== ============================== ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _SDK相关配置文件: SDK相关配置文件 ################################ SDK相关配置 与 五个文件相关: #. 《app_config.c》:“:ref:`应用配置文件《app_config.c》介绍`”; #. 《app_config.h》:“:ref:`应用配置文件《app_config.h》介绍`”; #. 《cpu_config.c》:“:ref:`芯片相关配置配置文件《cpu_config.c》介绍`”; #. 《board_cfg.c》:“:ref:`模块IO相关配置配置文件《board_cfg.c》介绍`”; #. 《app_modules.c》:“:ref:`应用APP配置文件《app_modules.h》介绍`”; #. 其他配置介绍:“:ref:`其他配置介绍`”; 下面介绍这五个文件和一些额外其他的配置。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _应用配置文件《app_config.c》介绍: 应用配置文件《app_config.c》介绍 *************************************** 《app_config.c》主要配置 与系统相关的配置: 文件路径为: **app/src/对应工程/** **注:voice_toy工程与voice_enhanced工程共用app/src/voice_func/app_config.c** 1、ISR Configuration 中断优先级配置 :: 中断优先级; *注:控制各个模块的中断优先级!* 2、vm_sfc Configuration vm_sfc优先级配置 :: config_spi_code_user_cache:vm_sfc放code区 1:放置在code区 0:放置在 3、midi Configuration midi配置 :: const int MAINTRACK_USE_CHN = 0; //0:用track号来区分 1:用channel号来区分。 const int MAX_DEC_PLAYER_CNT = 8; //midi乐谱解码最大同时发声的key数,范围[1,31] const int MAX_CTR_PLAYER_CNT = 8; //midi琴最大同时发声的key数,范围[1,31] const int NOTE_OFF_TRIGGER = 0; //midi琴note_off回调 1:time传0时,不会回调 0:time传0时,回调 const int MIDI_MAX_MARK_CNT = 0; //midi解码最大支持的mark数 4、malloc Configuration malloc配置 :: MM_ASSERT:MALLOC内部断言打印使能 FALSE:关闭malloc内部断言打印; TRUE:打开malloc内部断言打印,默认打开; 5、update Configuration 升级配置 :: //升级使用的区域,0:VM区, 1:eeprom区 const u8 dev_update_use_eeprom = 0; //设备升级时,是否保持住io的状态 const u8 dev_update_keep_io_status = 0; //设备升级时,用到的电源引脚 const u8 dev_update_power_io = -1; //ufw升级文件的vid要求: 0:vid要相同 1:vid要不一样 2:升级文件vid > 当前设备vid 3:升级文件vid < 当前设备vid const u8 ufw_vid_need_to_be_different = 0; 6、src Configuration src配置 :: //软件重采样quality影响运算速度,可选范围3~8,默认选8 const u8 resample_quality = 8; 7、sdmmc Configuration sdmmc配置 :: //sd空闲后挂起的最大cnt值,单位时间是sd检测函数的时间,即sd空闲后每次检测函数cnt就加1,为0时,则每次读写完都会发挂起命令 const u8 is_sdx_active_cnt_max = 20; 8、UART Configuration uart配置 :: const u8 lib_config_uart_flow_enable = 0; //浮点打印,仅仅作用在AD17N,AD18N const int printf_support_float = 0; 9、debug Configuration 异常配置 :: const u8 config_asser = 1; 该变量控制异常时行为,也控制断言ASSERT行为 控制异常行为:0:异常复位;1:异常打印卡死 控制断言ASSERT行为:0:断言时直接操作用户的断言处理函数;1:断言时增加断言位置打印再操作用户的断言处理函数; 断言部分详细介绍可参考 `其他配置介绍` 部分的断言ASSERT部分介绍 10、log Configuration 打印开关配置 :: 各模块的打印总开关 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _应用配置文件《app_config.h》介绍: 应用配置文件《app_config.h》介绍 *************************************** 《app_config.h》能配置与系统相关的配置: 文件路径为: **app/src/对应工程/** **注:voice_toy工程与voice_enhanced工程共用app/src/voice_func/app_config.h** #. **voice_toy工程**:该工程有完整发声玩具功能,能实现解码、MIDI功能;同时将VM、按键、休眠应用在工程中;使用4 cache way,所以**CPU指令运行效率最高**。 #. **voice_enhanced工程** 1、KEY VOICE Configuration 按键音配置 :: KEY_VOICE_EN:控制按键音开关配置 2、KEY Configuration 按键模块开关配置 :: KEY_IO_EN:IO按键开关配置 KEY_AD_EN:AD按键开关配置 KEY_MATRIX_EN:矩阵按键开关配置 KEY_IR_EN:红外按键开关配置 KEY_TOUCH_EN:触摸按键开关配置 3、Vm Mode Configuration VM模块配置 :: USE_NEW_VM:选择旧版VM(该版本已不维护) USE_OLD_VM:选择新版VM SYS_MEMORY_SELECT:默认选择新版VM 4、EXFLASH Configuration 外挂模块配置 :: TCFG_FLASH_SPI_TYPE_SELECT:外挂flash选择硬件spi还是软件spi(若选择硬件spi则默认使用SPI1) SPI_SD_IO_REUSE:spi引脚是否与sd卡io复用 TFG_SPI_UNIDIR_MODE_EN:外挂flash是否使用1线模式; 5、USB Configuration USB模块配置 :: TCFG_PC_ENABLE:是否开启PC模块 TCFG_USB_MSD_CDROM_ENABLE:是否开启USB_MSD_CDROM TCFG_USB_EXFLASH_UDISK_ENABLE:是否开启外挂flash用作u盘模块 TCFG_UDISK_ENABLE:是否开启u盘模块 TCFG_HID_HOST_ENABLE:是否开启主机HID功能(该功能暂不支持) TCFG_ADB_ENABLE:该功能暂不支持 TCFG_AOA_ENABLE:该功能暂不支持 TCFG_PUSH_CODE_ENABLE:该功能暂不支持 TCFG_USB_PORT_CHARGE:USB是否默认用作充电模式 TCFG_USB_DM_MULTIPLEX_WITH_SD_DAT0:USBDM是否与SD卡IO复用 USB_DEVICE_CLASS_CONFIG:USB从机模式支持的class 6、PMU Configuration PMU模块配置 :: TCFG_LOWPOWER_POWER_SEL:电源模式设置,只能固定使用LD0 TCFG_LOWPOWER_BTOSC_DISABLE:低功耗模式下BTOSC是否保持(无效参数) TCFG_LOWPOWER_LOWPOWER_SEL:控制芯片进入powerdown还是poweroff TCFG_LOWPOWER_PATTERN:选择软关机的方式(无效参数) TCFG_LOWPOWER_VDDIOM_LEVEL:强VDDIO等级配置 TCFG_LOWPOWER_VDDIOW_LEVEL:弱VDDIO等级配置 TCFG_LOWPOWER_OSC_TYPE:固定低功耗lptimer使用LRC TCFG_LOWPOWER_SOFF:控制softoff功能开关(无效参数) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _芯片相关配置配置文件《cpu_config.c》介绍: 芯片相关配置配置文件《cpu_config.c》介绍 ******************************************* 《cpu_config.c》主要配置 与芯片相关的配置: 文件路径为: **app/src/对应工程/对应芯片** **注:voice_toy工程与voice_enhanced工程共用app/src/voice_func/cpu/对应芯片/cpu_config.c** 1、audio电源配置 :: /* *********************** * 在不同供电场景下config_adda_voltage_mode配置不同的值: * 0:高压供电vbat,工作电压在2.7v ~ 5.4v之间 * 1:低压供电到iovdd&vbat,工作电压在1.8v ~ 3.6v之间 * 注:低压供电时,iovdd需要和vabt短接; * 注:此项配置只会影响到audio dac & audio adc的性能;不会对APA性能产生影响 * ************************/ const unsigned char config_adda_low_voltage_mode = 0; 2、audio模块配置 +----------------------------+--------------+--------------+--------------+ | AD24N AUDIO & APA 工作依赖常量 | +----------------------------+--------------+--------------+--------------+ | | Audio DAC | Audio ADC | Audio APA | +----------------------------+--------------+--------------+--------------+ | au_const_apa_en | ✘ | ✘ | ✔ | +----------------------------+--------------+--------------+--------------+ | au_const_dac_digital_en | ✔ | ✘ | ✔ | +----------------------------+--------------+--------------+--------------+ | au_const_dac_analog_en | ✔ | ✘ | ✘ | +----------------------------+--------------+--------------+--------------+ | au_const_adda_common_en | ✔ | ✔ | ✘ | +----------------------------+--------------+--------------+--------------+ AD24N AUDIO & APA 工作依赖常量 :: const u8 au_const_apa_en = 1; const u8 au_const_dac_digital_en = 1; const u8 au_const_dac_analog_en = 1; const u8 au_const_adda_common_en = 1; 3、audio_adc模块配置 :: const char MIC_PGA_G = 14; //0 ~ 14,无效参数 const bool audio_adc_diff_mic_mode = 0;// 差分amic使能(N端固定PA15) 0:单端amic 1:差分amic const bool audio_adc_diff_aux_mode = 0;// 差分aux使能(N端固定PA15) 0:单端aux 1:差分aux const AUADC_PERFORM_MODE auadc_perf_mode = AUADC_STANDARD_PERF; //audio_adc性能 const AUDIO_MIC_RS_MODE auadc_mic_rs_pwr_mode = MIC_RS_INSIDE; //偏置电阻选择 const AUDIO_MICPGA_G audio_adc_mic_pga_g = AUMIC_27db;//后级增益 const AUDIO_MICBIAS_RS audio_adc_mic_bias_rs = AUMIC_1k5;//micbias内部偏置电阻选择 const AUDIO_MICLDO_VS audio_adc_mic_ldo_vs = AUMIC_2v0;//micldo偏置电压选择 const AUDIO_MIC_INPUT_PORT audio_adc_mic_input_port = MIC_INPUT_ANA1_PB1;//mic_in输入口 const AUDIO_MIC_INPUT_PORT audio_adc_aux_input_port = MIC_INPUT_ANA2_PA14;//linein_in输入口 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _模块IO相关配置配置文件《board_cfg.c》介绍: 模块IO相关配置配置文件《board_cfg.c》介绍 ****************************************** 《board_cfg.c》 主要配置 对应芯片使用的各模块使用到的IO。 文件路径为: **app/src/对应工程/对应芯片** 1、UART Configuration 串口模块 :: UART_OUTPUT_CH_PORT: 串口IO,支持任意IO 2、KEY Configuration 按键模块 :: AD_KEY_CH_SEL:AD按键选择 IR_KEY_IO_SEL:IO按键选择 TCFG_ADKEY_IR_IO_REUSE:AD按键是否与红外IO复用 X_ADC_CH_SEL:矩阵按键x轴IO选择(要求是AD口) Y_PORT_SEL:矩阵按键y轴IO选择(普通IO即可) TOUCH_KEY_SEL:触摸按键 3、POWER WAKEUP IO Configuration 唤醒IO配置 :: POWER_WAKEUP_IO:唤醒IO 4、EXFLASH PORT Configuration 外挂flash配置 :: //port select for hardware spi //support any io EXFLASH_CS_PORT_SEL:硬件外挂flash片选脚 EXFLASH_CLK_PORT_SEL:硬件外挂flash时钟脚 EXFLASH_D0_PORT_SEL :硬件外挂flash D0脚 EXFLASH_D1_PORT_SEL:硬件外挂flash D1脚 //select for soft spi //support any io A_CLK_BIT 软件spi时钟脚 A_CLK_PORT(x) A_D0_BIT 软件spi D0脚 A_D0_PORT(x) A_D1_BIT 软件spi D1脚 A_D1_PORT(x) 5、SMMC PORT Configuration SD卡IO配置 :: SDMMC_IO_USE_CROSSBAR:默认为1即可。 //support any io SDMMC_CLK_IO:SD卡时钟脚(CLK) SDMMC_CMD_IO:SD卡命令脚(CMD) SDMMC_DAT_IO:SD卡数据脚(DATA) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _其他配置介绍: 其他配置介绍 *************************************** 1、断言ASSERT处理(对应芯片的cpu.h) | 断言分为 驱动断言(assert_d) 和 系统断言(ASSERT)。 | 驱动断言(assert_d)为 相关驱动使用的断言行为,通常为while1,建议用户不要使用和修改该断言。 | 系统断言(ASSERT)为 系统外部使用的断言行为,用户可以在cpu_assert_debug函数里自定义断言的行为。 .. image:: ASSERT.png :alt: "断言行为“ :align: center ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _应用APP配置文件《app_modules.h》介绍: 应用APP配置文件《app_modules.h》介绍 *************************************** 各个工程下有对应cpu的应用配置文件《app_modules.h》,其中的宏定义能配置支持的编解码格式、以及APP模式相关的配置; 每一个配置项都可独立开关,关闭没有用到的宏定义,可以 * 减少生成的代码量,节省程序空间和运行空间 * 。 **该文件中出现的宏,即该工程拥有的功能;对于默认为0的宏,使能为1即可正常使用;** 解码模块 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ============================ ========================= 宏定义 含义 ============================ ========================= DECODER_UMP3_EN UMP3解码使能; DECODER_MP3_ST_EN 标准MP3解码使能(mbox独有); DECODER_WAV_EN WAV解码使能(mbox独有); DECODER_F1A_EN F1A解码使能; DECODER_MIDI_EN MIDI解码使能; DECODER_MIDI_KEYBOARD_EN MIDI琴解码使能; DECODER_A_EN A格式解码使能; HAS_MIO_EN MIO功能使能; ============================ ========================= 音频算法模块 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ============== ==================== 宏定义 含义 ============== ==================== AUDIO_SPEED_EN 变速变调算法使能 SPEAKER_EN 扩音使能; VO_PITCH_EN 变音算法使能; VO_CHANGE_EN 动物变声算法使能; PCM_EQ_EN EQ算法使能; ECHO_EN ECHO算法模块使能; ANS_EN 音频降噪算法模块使能; ============== ==================== 驱动模块功能 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ =================== ======================================================================================== 宏定义 含义 =================== ======================================================================================== EXT_FLASH_EN 外挂FLASH使能,使用外挂FLASH需要打开该宏; TFG_SD_EN SD卡模块使能,使用SD卡需要打开该宏; =================== ======================================================================================== 芯片应用功能 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ =================== ======================================================================================== 宏定义 含义 =================== ======================================================================================== RECORD_MODE_EN 录音模式使能; LINEIN_MODE_EN LINEIN(AUX)模式使能; SIMPLE_DEC_EN 多路解码模式使能; LOUDSPEAKER_EN 扩音模式使能; FM_EN FM模块使能; =================== ======================================================================================== .. image:: app_modules.h.png :alt: "app_moduels.h配置“ :align: center .. centered:: app_modules.h配置 芯片Codeblocks宏定义功能 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ =================== ======================================================================================== 宏定义 含义 =================== ======================================================================================== AUDIO_ADC_EN AUDIO ADC使能; ENCODER_EN 编码使能,有该配置即支持编码功能; EEPROM_EN EEPROM使能,使用EEPROM需要打开该宏,并在SDK工程中添加相应的c文件以及h文件; =================== ======================================================================================== .. image:: CodeBlocks-define.png :alt: "CodeBlocks 宏定义配置“ :align: center ^^^^^^^^^^^^^^^^^^^^ .. _SDK工程裁切: SDK工程裁切 ################################################################ SDK自带了app_modules.h模块管理机制; 裁切工程只需将app_modules.h中需要关闭的宏定义配置为0即可; .. image:: cut_prj_1-1.png :alt: "裁剪某个算法库“ :align: center ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 如何将压缩格式从工程中移除 *************************************** 目前发布的AD24N SDK里面支持UMP3、A两种格式的压缩,在开发过程中如果不需要支持某些格式,那么可以将相关的代码删除。这样可以极大的节省生成的代码大小; 下面以移除UMP3压缩格式为例介绍,主要分三步: | ① 移除相关的库文件; | ② 移除相关的源文件; | ③ 删除源码使用到的地方定义; 裁切压缩第一步 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 打开窗口,删除mp3编码库的库包含: .. image:: cut_enc_1.png :alt: "裁剪某个压缩库“ :align: center **注:部分宏配置需要在《app_modules.h》中关闭!详情请见上文《裁切解码第一步》** 裁切压缩第二步 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 移除工程目录app\\src\\common\\decoder\\list\\下的压缩源文件: .. image:: cut_enc_2.png :alt: "裁剪某个压缩库“ :align: center 裁切压缩第三步 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 在文件app\\post_build\\sh54\\app_ld.c中删除相关格式用到的资源定义,切记此文件在不可放在工程中编译,如果添加进了工程,一定要将其编译和链接包含取消掉。 .. image:: cut_enc_3.png :alt: "裁剪某个压缩库“ :align: center 裁切压缩第四步 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 修改一些编译错误,这里主要指在在程序中对编码接口的调用: .. image:: cut_enc_4.png :alt: "裁剪某个压缩库“ :align: center