AK7739手册解读

本文介绍了一款高度集成的数字信号处理器AK7739,该处理器包含24位立体声ADC、32位立体声DAC、采样速率转换器等模块,支持最高192kHz采样率。具备两个DSP核及一个子DSP,用于音频和语音处理,并支持RAM编程。
ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

目录

1、概述

2、功能

3、框图

3.1、设备框图

 3.2、DSP1框图

3.3、DSP2框图

3.4、子DSP框图

4、引脚配置与功能

4.1、引脚布局

4.2、引脚功能

4.3、未使用引脚的处理

4.4、内部下拉引脚状态

5、绝对最大额定参数

6、推荐的操作条件

7、电气特性

7.1、模拟特性

7.1.1、麦克风放大器增益

7.1.2、麦克风偏置输出

7.1.3、麦克风放大器 + ADC1

7.1.4、ADC2

7.1.5、DAC


1、概述

        AK7739是一个高度集成的数字信号处理器,包括一个带MIC增益放大器的24位立体声ADC,一个带输入选择器的24位立体声ADC,两个32位立体声DAC, 4个立体声和4个单声采样速率转换器(SRC),支持高达192kHz的采样频率,一个DIT,两个DSP和一个音频/高频处理的子DSP。DSP1和DSP2具有6144step/fs(当fs=48kHz)并行处理能力。AK7739能够同时处理声音和语音,如免提功能,因为两个DSP能够在不同但同步的采样频率上工作。由于AK7739是一个基于RAM的DSP,它可以根据用户的要求自由编程,如声学效果和专有的高性能免提功能。AK7739采用节省空间的64脚HTQFP封装。

 2、功能

        2.1、双DSP (DSP1, DSP2):(延迟RAM区域由DSP1和DSP2共享)

        TODO

3、框图

3.1、设备框图

 3.2、DSP1框图

3.3、DSP2框图

3.4、子DSP框图

4、引脚配置与功能

4.1、引脚布局

4.2、引脚功能

4.3、未使用引脚的处理

分类引脚设置
模拟

AOUT1L, AOUT1R, AOUT2L, AOUT2R, XTO, MPREF, MPWR1,MPWR2, INN1/GNDIN1L/DMCLK1, INP1/AIN1L/DMDAT1,  INP2/AIN1R/DMDAT2, INN2/GNDIN1R/DMCLK2,  AIN2LN/AIN4L, AIN2LP/AIN3L, GNDIN4, AIN2RP/AIN3R,  AIN2RN/AIN4R, VCOM

open
XTI连接到AVSS
数字SDOUT1, SDOUT2/GPO0, ECSO/SDOUT5/GPO2/CLKO,
ESDO/LRCK5/CLKO, ESCLK/BICK5, SDOUT6/DIT/GPO3/CLKO,SDOUT3/GPO1/SBST, STO/SDOUT4/RDY, SDA/SO
Open
SDIN1, BICK1, LRCK1, SDIN2/JX0, BICK2, LRCK2, SDIN6/JX3,
ESDI/SDIN5/JX2, SDIN3/JX1, LRCK3, BICK3, LRCK4/CLKO/RDY,
BICK4, SDIN4, CADN/CSN, SCL/SCLK, SELE/SI, PDN
连接到DVSS

                未使用的I/O引脚必须正确连接。

4.4、内部下拉引脚状态

5、绝对最大额定参数

 注释:

        1、所有电压都是相对于地的。AVSS和DVSS必须连接到同一地。

        2、模拟输入电压的最大值在(AVDD+0.3)V到3.9V之间。

        3、TVDD1的输入或输入/输出引脚的最大数字输入电压较小,介于(TVDD1+0.3)V到3.9V之间。

        4、TVDD2的输入或输入/输出引脚的最大数字输入电压在(TVDD2+0.3)V到3.9V之间较小。

        5、TVDD3的输入或输入/输出引脚的最大数字输入电压在(TVDD3+0.3)V到3.9V之间较小。

警告:

        超过或超过这些限制的操作可能会导致设备的永久性损坏。在这种极端情况下,无法保证正常运行。

6、推荐的操作条件

注意:

        1、VDD12必须在AVDD和TVDD1-3之后或同时上电。VDD12必须在AVDD和TVDD1-3之前或同时下电。供电时,PDN引脚应保持“L”。PDN引脚允许为“H”后,所有的电源输入和安置。

        2、禁止在外部设备电源打开的情况下切断AK7739的电源。当使用I2C接口时,SDA和SCL引脚的上拉电阻应该连接到TVDD2或更低的电压。

警告:AKM对超出数据表条件的使用不承担任何责任。

7、电气特性

7.1、模拟特性

7.1.1、麦克风放大器增益

7.1.2、麦克风偏置输出

 注意:

        输出量与AVDD (0.76×AVDD)成正比。

7.1.3、麦克风放大器 + ADC1

 注意:

        1、MGNL/R[3:0] bits = 0x1 (0dB)。输入全量程电压与AVDD (0.86 x AVDD)成正比。

        2、MGNL/R[3:0]位= 0x7 (+18dB)。输入全量程电压与AVDD (0.108 x AVDD)成正比。

        3、通道间隔离-1dBFS信号输入。

        4、CMRR应用于1kHz, 100mVpp正弦波的差分输入信号。

        5、PSRR应用于1kHz, 50mVpp正弦波的AVDD和VREFH。

        6、CMRR在伪差分输入和伪宏大输入引脚上都应用了1khz 100mVpp正弦波。定义为伪差分输入加100mVpp正弦波时的参考值。

7.1.4、ADC2

注意:

        1、AIN2LP, AIN2LN, AIN2RP和AIN2RN引脚。输入全量程电压与AVDD (0.86 x AVDD)成正比。

        2、AIN3L, AIN3R, AIN4L和AIN4R引脚。输入全量程电压与AVDD (0.86 x AVDD)成正比。

7.1.5、DAC

 注意:

        1、全面的输出电压。输出电压与AVDD (AVDD × 0.86)成正比。

        2、Lch和Rch的每个DAC之间的通道间隔离,输入信号为0dBFS。(AOUT1L和AOUT1R, AOUT2L和AOUT2R)。

        3、交流负载。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think>我们针对AK7739芯片在MCU平台上的开发进行详细说明。AK7739是一款高性能音频DSP,常用于汽车音响系统、家庭影院等场景,支持多种音效处理和音频接口。 开发重点包括: 1. 硬件接口配置(I2C/SPI控制、音频接口) 2. DSP寄存器配置 3. 音效算法加载与参数调整 4. 实时控制实现 以下是完整的开发方案:</think>### AK7739 在 MCU 平台上的开发指南 AK7739 是 Asahi Kasei 公司的高性能音频 DSP 处理器,广泛应用于汽车音响系统、家庭影院和专业音频设备。以下是基于 STM32 MCU 的完整开发方案: #### 1. 硬件接口与初始化 ```c // ak7739.h #define AK7739_I2C_ADDR 0x20 #define AK7739_RESET_PIN GPIO_PIN_5 #define AK7739_RESET_PORT GPIOB typedef struct { I2C_HandleTypeDef *hi2c; SPI_HandleTypeDef *hspi; uint32_t sample_rate; uint8_t audio_format; } AK7739_HandleTypeDef; // 初始化函数 HAL_StatusTypeDef AK7739_Init(AK7739_HandleTypeDef *hak) { // 硬件复位 HAL_GPIO_WritePin(AK7739_RESET_PORT, AK7739_RESET_PIN, GPIO_PIN_RESET); HAL_Delay(10); HAL_GPIO_WritePin(AK7739_RESET_PORT, AK7739_RESET_PIN, GPIO_PIN_SET); HAL_Delay(100); // 等待芯片启动 // 设置时钟源 (使用外部晶振) uint8_t clk_cmd[] = {0x00, 0x01, 0x80}; // PLL寄存器设置 AK7739_Write(hak, clk_cmd, sizeof(clk_cmd)); // 设置音频接口 uint8_t if_cmd[] = {0x02, 0x00, 0x88}; // I2S模式, 24位数据 return AK7739_Write(hak, if_cmd, sizeof(if_cmd)); } ``` #### 2. 通信协议实现 ```c // ak7739.c #include "ak7739.h" // 寄存器写入函数 HAL_StatusTypeDef AK7739_Write(AK7739_HandleTypeDef *hak, uint8_t *data, uint16_t size) { uint8_t buffer[32]; // 添加设备地址和控制字节 buffer[0] = AK7739_I2C_ADDR << 1; // 设备地址 + 写位 buffer[1] = 0x00; // 控制字节 (寄存器地址模式) memcpy(&buffer[2], data, size); return HAL_I2C_Master_Transmit(hak->hi2c, AK7739_I2C_ADDR << 1, buffer, size + 2, HAL_MAX_DELAY); } // 寄存器读取函数 HAL_StatusTypeDef AK7739_Read(AK7739_HandleTypeDef *hak, uint8_t reg, uint8_t *data, uint16_t size) { uint8_t cmd[3] = { AK7739_I2C_ADDR << 1, // 设备地址 + 写位 0x00, // 控制字节 reg // 寄存器地址 }; // 发送读取命令 HAL_StatusTypeDef status = HAL_I2C_Master_Transmit(hak->hi2c, AK7739_I2C_ADDR << 1, cmd, sizeof(cmd), HAL_MAX_DELAY); if(status != HAL_OK) return status; // 读取数据 return HAL_I2C_Master_Receive(hak->hi2c, AK7739_I2C_ADDR << 1 | 0x01, data, size, HAL_MAX_DELAY); } ``` #### 3. 音频处理配置 ```c // 配置输入源 HAL_StatusTypeDef AK7739_SetInputSource(AK7739_HandleTypeDef *hak, uint8_t source) { // source: 0=ADC, 1=I2S1, 2=I2S2, 3=SPDIF uint8_t cmd[] = {0x10, source & 0x03}; return AK7739_Write(hak, cmd, sizeof(cmd)); } // 配置均衡器 HAL_StatusTypeDef AK7739_SetEqualizer(AK7739_HandleTypeDef *hak, uint8_t band, int8_t gain) { // band: 0-4 (低频到高频), gain: -12dB 到 +12dB if(band > 4 || gain < -12 || gain > 12) return HAL_ERROR; uint8_t reg = 0x20 + band; uint8_t cmd[] = {reg, (uint8_t)(gain + 64)}; // 转换为0-127范围 return AK7739_Write(hak, cmd, sizeof(cmd)); } // 配置数字信号处理(DSP)效果 typedef enum { AK7739_EFFECT_OFF, AK7739_EFFECT_HALL, AK7739_EFFECT_CLUB, AK7739_EFFECT_STADIUM } AK7739_EffectType; HAL_StatusTypeDef AK7739_SetEffect(AK7739_HandleTypeDef *hak, AK7739_EffectType effect) { uint8_t cmd[] = {0x30, (uint8_t)effect}; return AK7739_Write(hak, cmd, sizeof(cmd)); } // 配置动态范围控制(DRC) HAL_StatusTypeDef AK7739_SetDRC(AK7739_HandleTypeDef *hak, uint8_t mode, uint8_t threshold, uint8_t ratio) { uint8_t cmd[] = {0x40, mode, threshold, ratio}; return AK7739_Write(hak, cmd, sizeof(cmd)); } ``` #### 4. 高级音频处理功能 ```c // 配置多频段压缩器 typedef struct { uint8_t band; // 频段 0-3 uint8_t threshold; // 阈值 (0-127) uint8_t ratio; // 压缩比 (1-20) uint8_t attack; // 启动时间 (0-127) uint8_t release; // 释放时间 (0-127) } CompressorBandConfig; HAL_StatusTypeDef AK7739_SetMultibandCompressor(AK7739_HandleTypeDef *hak, CompressorBandConfig *config) { uint8_t base_reg = 0x50 + config->band * 4; uint8_t cmd[] = { base_reg, config->threshold, config->ratio, config->attack, config->release }; return AK7739_Write(hak, cmd, sizeof(cmd)); } // 配置时间对齐(用于扬声器位置校正) HAL_StatusTypeDef AK7739_SetTimeAlignment(AK7739_HandleTypeDef *hak, uint8_t channel, uint16_t delay_samples) { if(channel > 5 || delay_samples > 1023) return HAL_ERROR; uint8_t reg = 0x60 + channel; uint8_t cmd[] = { reg, (uint8_t)(delay_samples >> 8), (uint8_t)(delay_samples & 0xFF) }; return AK7739_Write(hak, cmd, sizeof(cmd)); } // 配置扬声器分频器 typedef enum { CROSSOVER_OFF, CROSSOVER_LOW_PASS, CROSSOVER_HIGH_PASS, CROSSOVER_BAND_PASS } CrossoverType; HAL_StatusTypeDef AK7739_SetCrossover(AK7739_HandleTypeDef *hak, uint8_t channel, CrossoverType type, uint16_t freq) { if(channel > 5 || freq < 50 || freq > 20000) return HAL_ERROR; // 计算寄存器值 uint16_t reg_value = (freq * 1024) / 48000; // 48kHz采样率下的系数 uint8_t reg = 0x70 + channel; uint8_t cmd[] = { reg, (uint8_t)type, (uint8_t)(reg_value >> 8), (uint8_t)(reg_value & 0xFF) }; return AK7739_Write(hak, cmd, sizeof(cmd)); } ``` #### 5. 音频处理流程与DMA配置 ```c // I2S DMA配置 void AK7739_ConfigureI2S(I2S_HandleTypeDef *hi2s, uint32_t sample_rate) { hi2s->Instance = SPI2; hi2s->Init.Mode = I2S_MODE_MASTER_TX; hi2s->Init.Standard = I2S_STANDARD_PHILIPS; hi2s->Init.DataFormat = I2S_DATAFORMAT_24B; hi2s->Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; hi2s->Init.AudioFreq = sample_rate; hi2s->Init.CPOL = I2S_CPOL_LOW; HAL_I2S_Init(hi2s); // 配置DMA __HAL_RCC_DMA1_CLK_ENABLE(); hdma_i2s_tx.Instance = DMA1_Stream4; hdma_i2s_tx.Init.Channel = DMA_CHANNEL_0; hdma_i2s_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_i2s_tx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_i2s_tx.Init.MemInc = DMA_MINC_ENABLE; hdma_i2s_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_i2s_tx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_i2s_tx.Init.Mode = DMA_CIRCULAR; hdma_i2s_tx.Init.Priority = DMA_PRIORITY_HIGH; HAL_DMA_Init(&hdma_i2s_tx); __HAL_LINKDMA(hi2s, hdmatx, hdma_i2s_tx); } // 双缓冲音频处理 #define AUDIO_BUFFER_SIZE 512 int32_t audio_buffer[2][AUDIO_BUFFER_SIZE]; // 双缓冲区 volatile uint8_t current_buffer = 0; void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s) { // 前半缓冲区传输完成,处理后半缓冲区 process_audio(audio_buffer[1], AUDIO_BUFFER_SIZE/2); current_buffer = 1; } void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s) { // 后半缓冲区传输完成,处理前半缓冲区 process_audio(audio_buffer[0], AUDIO_BUFFER_SIZE/2); current_buffer = 0; } // 主应用 int main(void) { // HAL初始化 HAL_Init(); SystemClock_Config(); // I2C初始化 hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 400000; HAL_I2C_Init(&hi2c1); // AK7739初始化 AK7739_HandleTypeDef hak; hak.hi2c = &hi2c1; hak.sample_rate = 48000; AK7739_Init(&hak); // 配置音频处理 AK7739_SetInputSource(&hak, 1); // I2S输入 AK7739_SetEffect(&hak, AK7739_EFFECT_HALL); // 配置I2S和DMA MX_I2S2_Init(); AK7739_ConfigureI2S(&hi2s2, hak.sample_rate); // 启动音频传输 HAL_I2S_Transmit_DMA(&hi2s2, (uint16_t*)audio_buffer[0], AUDIO_BUFFER_SIZE); while (1) { // 处理用户控制 handle_user_controls(&hak); // 低功耗模式 __WFI(); } } ``` #### 6. 用户控制接口 ```c // 用户控制处理 void handle_user_controls(AK7739_HandleTypeDef *hak) { static uint32_t last_control_time = 0; if(HAL_GetTick() - last_control_time < 100) return; last_control_time = HAL_GetTick(); // 读取旋钮位置 uint16_t vol_pot = read_volume_pot(); uint8_t volume = map(vol_pot, 0, 4095, 0, 100); // 设置主音量 uint8_t vol_cmd[] = {0x05, volume}; AK7739_Write(hak, vol_cmd, sizeof(vol_cmd)); // 读取均衡器设置 uint8_t bass = read_bass_control(); uint8_t treble = read_treble_control(); // 设置均衡器 AK7739_SetEqualizer(hak, 0, bass - 7); // 低频段 (-7到+7) AK7739_SetEqualizer(hak, 4, treble - 7); // 高频段 // 检查模式按钮 if(read_effect_button()) { static uint8_t effect_mode = 0; effect_mode = (effect_mode + 1) % 4; AK7739_SetEffect(hak, effect_mode); } } ``` #### 7. 高级功能:动态配置加载 ```c // 从Flash加载预设配置 typedef struct { char name[16]; uint8_t eq_bands[5]; uint8_t effect; uint8_t drc_settings[3]; } AudioPreset; HAL_StatusTypeDef AK7739_LoadPreset(AK7739_HandleTypeDef *hak, const AudioPreset *preset) { // 设置均衡器 for(uint8_t i = 0; i < 5; i++) { AK7739_SetEqualizer(hak, i, preset->eq_bands[i] - 12); } // 设置效果 AK7739_SetEffect(hak, preset->effect); // 设置DRC AK7739_SetDRC(hak, preset->drc_settings[0], preset->drc_settings[1], preset->drc_settings[2]); return HAL_OK; } // 示例预设 const AudioPreset presets[] = { {"Rock", {8, 6, 0, 4, 7}, AK7739_EFFECT_OFF, {1, 80, 4}}, {"Jazz", {6, 5, 0, 5, 6}, AK7739_EFFECT_CLUB, {1, 70, 3}}, {"Classical", {5, 4, 0, 4, 8}, AK7739_EFFECT_HALL, {0, 0, 0}}, {"Pop", {7, 5, 0, 5, 6}, AK7739_EFFECT_OFF, {1, 75, 4}} }; // 切换预设 void switch_preset(AK7739_HandleTypeDef *hak, uint8_t index) { if(index >= sizeof(presets)/sizeof(AudioPreset)) return; AK7739_LoadPreset(hak, &presets[index]); display_preset_name(presets[index].name); } ``` ### 系统架构设计 #### 1. 硬件连接示意图 ```mermaid graph LR MCU[STM32 MCU] -->|I2C/SPI| AK7739 MCU -->|I2S| AK7739 AK7739 -->|I2S| ADC[ADC/DAC] ADC -->|模拟信号| AMP[功率放大器] AMP --> 扬声器 麦克风 -->|模拟信号| ADC 用户控制 -->|GPIO/ADC| MCU 显示屏 -->|SPI/I2C| MCU ``` #### 2. 软件架构 ```mermaid graph TD A[主控制循环] --> B[用户输入处理] A --> C[音频处理] A --> D[系统状态管理] B --> E[参数调整] E --> F[AK7739配置] C --> G[音频DMA传输] G --> H[实时音频处理] D --> I[低功耗管理] D --> J[故障检测] ``` ### 关键开发技术 #### 1. 实时音频处理优化 ```c // SIMD优化示例 (ARM Cortex-M4/M7) void process_audio(int32_t *buffer, uint32_t size) { // 使用ARM DSP库加速处理 arm_biquad_casd_df1_inst_q31 eq_inst; arm_biquad_cascade_df1_init_q31(&eq_inst, NUM_EQ_STAGES, eq_coeffs, eq_state); arm_biquad_cascade_df1_q31(&eq_inst, buffer, buffer, size); // 动态范围压缩 for(uint32_t i = 0; i < size; i++) { int32_t sample = buffer[i]; int32_t abs_sample = abs(sample); if(abs_sample > COMP_THRESHOLD) { int32_t diff = abs_sample - COMP_THRESHOLD; int32_t gain_reduction = (diff * COMP_RATIO) >> 8; sample = (sample > 0) ? sample - gain_reduction : sample + gain_reduction; } buffer[i] = sample; } } ``` #### 2. 多核处理方案 (Cortex-M7 + M4) ```c // 主核 (Cortex-M7) void main_core(void) { // 初始化外设 // 配置AK7739 // 启动从核 while(1) { // 处理用户界面 // 系统管理 } } // 从核 (Cortex-M4) void audio_core(void) { // 初始化音频子系统 // 配置DMA while(1) { // 实时音频处理 // 低延迟控制 } } // 核间通信 void send_audio_command(uint8_t cmd, int16_t value) { HSEM->COMMAND[0].R = (1 << 8) | cmd; // 发送命令 HSEM->VALUE[0] = value; // 发送参数 } ``` #### 3. 低功耗管理 ```c void enter_low_power_mode(void) { // 检查是否处于活动状态 if(!audio_active && !user_input_active) { // 降低AK7739功耗 uint8_t cmd[] = {0x01, 0x00}; // 进入待机模式 AK7739_Write(&hak, cmd, sizeof(cmd)); // 设置MCU低功耗模式 HAL_SuspendTick(); HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 唤醒后恢复 SystemClock_Config(); HAL_ResumeTick(); // 恢复AK7739 AK7739_Init(&hak); } } ``` ### 典型应用场景 1. **高端汽车音响系统**: - 多区域音频控制 - 主动降噪(ANC)功能 - 车速自适应音量补偿 2. **智能家居音频中心**: - 语音助手集成 - 多房间音频同步 - 自适应声学校正 3. **专业音频设备**: - 数字混音器 - 现场扩声处理器 - 录音室效果器
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值