SC5654板级适配指南

简介: 本文介绍 SC5654板级适配指南

1. 概述

SC5654芯片是面向语音识别、音频处理的SOC,该芯片基于平头哥玄铁803,内置240K高速SRAM、8M大容量SDRAM、集成高性能音频专用DSP和音频CODEC。

CB5654是基于SC5654芯片的智能语音应用开发板,本文主要基于该开发板的适配代码,讲解如何适配一款新的板子。

2. 目录结构

silan/cb5654
├── bootimgs          - 引导固件
├── configs             - 默认的系统分区及编译链接文件
├── dspalg_cxc         - 士兰语音识别方案核间通讯接口
├── include          - 包含引脚配置定义、OS配置文件、LWIP配置文件
├── audio            - 音频初始化及 软VAD低功耗框架
├── base_init.c         -  板级初始化
├── pinmux_init.c    -  引脚复用配置
├── soc_lpm.c         -  低功耗适配
├── board_lpm.c         - 板级低功耗处理
└── package.yaml     - 组件配置文件

3. 初始化

3.1 引脚复用

设备引导时会先调用board_init函数,该函数中做芯片级的初始化和引脚的复用配置。

代码路径

silan/cb5654/pinmux_init.c

代码示例

开发板中明确的引脚功能进行配置,例如PA4、PA5复用为UART2,作为串口调试输出,PB0、PB1复用为UART1和RTL8723的蓝牙模块通讯。开发者需要根据实际的硬件连接进行复用的配置。

static void board_pinmux_config(void)
{
    //console
    drv_pinmux_config(PA4, PA4_UART2_TX);
    drv_pinmux_config(PA5, PA5_UART2_RX);

    // BT
    drv_pinmux_config(PB0, PB0_UART1_TX);
    drv_pinmux_config(PB1, PB1_UART1_RX);

    //WiFi
    drv_pinmux_config(PC2, PC2_SD_D0);
    drv_pinmux_config(PC1, PC1_SD_D1);
    drv_pinmux_config(PC6, PC6_SD_D2);
    drv_pinmux_config(PC5, PC5_SD_D3);
    drv_pinmux_config(PC3, PC3_SD_CLK);
    drv_pinmux_config(PC4, PC4_SD_CMD_CMD);
    drv_pinmux_config(PC0, PC0_SD_DET);

    //SD card
    drv_pinmux_config(PC9, PC9_SDIO_D0);
    drv_pinmux_config(PC8, PC8_SDIO_D1);
    drv_pinmux_config(PC13, PC13_SDIO_D2);
    drv_pinmux_config(PC12, PC12_SDIO_D3);
    drv_pinmux_config(PC10, PC10_SDIO_CLK);
    drv_pinmux_config(PC11, PC11_SDIO_CMD);
    drv_pinmux_config(PC7, PC7_SDIO_DET);
}

void board_init(void)
{
    board_pinmux_config();
    
    /* 关闭无需调试核的调试引脚,相关引脚可作为通用IO使用 */
    silan_mcu_debug_close();
    silan_dsp_debug_close();
}

3.2 初始化接口

板级的初始化分别两个接口,board_base_init为板级小系统的初始化;board_audio_init提供音频功能的初始化。 代码路径

silan/cb5654/base_init.c

代码示例

板级小系统的初始化,主要对可用的串口和Flash进行初始化,CB5654开发板的三个串口都注册到串口驱动,若新的板子,串口被其他功能复用,根据情况删除注册。

注意:uart_csky_register函数的参数是从零开始的ID,实际的硬件串口号需减一

代码中宏SOC_DSP_LDO_LEVEL和宏CONFIG_DMAC_DSP_ACQ的功能,板级参数配置章节再说明

void board_base_init(void)
{
#ifdef SOC_DSP_LDO_LEVEL
    extern void silan_dsp_ldo_config(int level);
    extern void silan_soc_ldo_config(int level);
    silan_dsp_ldo_config(SOC_DSP_LDO_LEVEL);
    silan_soc_ldo_config(SOC_DSP_LDO_LEVEL);
#endif

    uart_csky_register(0); /* UART1 */
    uart_csky_register(1); /* UART2 */
    uart_csky_register(2); /* UART3 */
    spiflash_csky_register(0);

#ifndef CONFIG_DMAC_DSP_ACQ
    sram_init();
#endif
}

音频功能的初始化,启动麦克风和参考音的采集,该函数一般无需修改,功能已经参数化,板级参数配置章节再说明



void board_audio_init()
{
#ifndef CONFIG_DMAC_DSP_ACQ
    /* 参考音 增益, 前端反馈,理论 (16)0dB即可,但单端模补偿6dB*/
    voice_ref_init(24, 24); /* 数值单位0.75dB 16 + 6/0.75 = 24 */

    /* 麦克风 增益, boost (3)20dB  模拟增益(8)0dB,伪差分补偿6dB,看信号还较小继续增加12dB */
    int mic_gain_val = 8 + (CONFIG_MIC_GAIN * 2 / 3); 
    voice_mic_init(3, mic_gain_val, mic_gain_val); /*数值单位1.5dB  8 + 18/1.5 = 20*/
#endif
}

4. 参数配置

4.1 硬件配置

代码路径

silan/cb5654/include/board_config.h

代码示例

SOC_DSP_LDO_LEVEL宏定义芯片内部输出的DSP的供电电压
CONSOLE_ID定义调试串口输出的串口ID,1对应硬件的UART2

/* 系统 */
//1:1.2V  2:1.0V  3:1.4V
// #define SOC_DSP_LDO_LEVEL 3

#define CONSOLE_ID 1

示例应用中使用一个LED灯,此处定义灯的引脚和参数

/* LED */
#define PIN_LED_R  LED_PIN_NOT_SET
#define PIN_LED_G  PD4
#define PIN_LED_B  LED_PIN_NOT_SET
#define LED_FLIP_FLAG  1  /* 低电平亮 */

定义是否支持芯片内部RTC,RTC需要外部电路支持,若板子支持可开启改配置,示例应用会支持时间同步和闹铃功能

/* RTC */
#define CONFIG_RTC_EN   1

音频相关配置

  1. PIN_PA_EN 模拟功放对应的引脚号
  2. CONFIG_VOL_MAX 音量系统的最大值配置,下面参数已经配置为芯片的最佳参数,不建议修改
  3. CONFIG_LEFT_GAIN CONFIG_RIGHT_GAIN,左右声道 的音量配置,-1表示该声道应用可调,该声道输出到扬声器,若固定一个值则表示该声道为参考音声道,该值不能大于CONFIG_VOL_MAX值
  4. CONFIG_MIC_GAIN 麦克风的增益配置db数,CONFIG_MIC_GAIN+20db是总的增益数
/* 音频 */
#define PIN_PA_EN  PD0
#define CONFIG_VOL_MAX    (88)
#define CONFIG_LEFT_GAIN  (-1) /* 左声道固定 -> PA */
#define CONFIG_RIGHT_GAIN (88) /* 右声道可调 -> REF */
#define CONFIG_MIC_GAIN   (18) /* MIC初始20dB, 该值在20dB基础上增加的dB数 */

WiFi驱动配置

  1. WLAN_ENABLE_PIN WiFi芯片使能引脚
  2. WLAN_POWER_PIN WiFi芯片的供电开关引脚
  3. PIN_WL_WAKE_HOST WiFi芯片的唤醒主控的引脚
/* WiFi */
#define WLAN_ENABLE_PIN   PC8
#define WLAN_POWER_PIN    PC0  /* 等于0xffffffff表示不支持 */

#define PIN_WL_WAKE_HOST PA6
#define PIN_WL_WAKE_HOST_GROUP LPM_DEV_MASK_GENERAL_GPIO2

ADC按键配置

  1. PIN_ADC_KEY 按键的ADC引脚号
  2. KEY_ADC_VAL* ADC各个按键对应的电压值
  3. KEY_AD_VAL_OFFSET 按键检测允许的误差范围
/
* ADC按键引脚 */
#define PIN_ADC_KEY    PA1

/* ADC按键配置 */
#define KEY_ADC_VAL1 1751
#define KEY_ADC_VAL2 2311
#define KEY_ADC_VAL3 3051
#define KEY_ADC_VAL4 1376
#define KEY_ADC_VAL5 3587
#define KEY_AD_VAL_OFFSET 100    /* 按键值误差允许 */

#define VAD_ADC_VAL_MAX   KEY_ADC_VAL5 + KEY_AD_VAL_OFFSET /* 最大值 + 误差值 */
#define VAD_ADC_VAL_MIN   KEY_ADC_VAL4 - KEY_AD_VAL_OFFSET /* 最小值 - 误差值 */

GPIO信息,开发板对通用GPIO的说明,方便测试验证,可选配


/* 可用GPIO列表 */
#define USER_GPIO_LIST_STR \
"ID  Name\n \
42  PD4(LED)\n \
46  PD0(PA MUTE)\n \
45  PD1\n \
38  PD7\n \
39  PD8\n \
29  PC12\n \
30  PC13\n \
 2  PA2\n \
59  PB7\n \
60  PB6\n \
61  PB5\n \
62  PB4\n \
"

4.2 其他配置

image.png

5. 低功耗

5.1 进入低功耗

应用低功耗流程需要进入某种低功耗状态时会调用该函数。

函数原型

void board_enter_lpm(pm_policy_t policy);

功能描述 控制设备进入指定的功耗模式

参数描述

image.png

5.2 退出低功耗

设备从低功耗状态唤醒前调用该函数,在该函数中适配外设的恢复流程。

函数原型

void board_leave_lpm(pm_policy_t policy);

功能描述 从低功耗状态唤醒进入正常运行状态。

参数描述

image.png

文章来源:芯片开放社区
文章链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=3771155070247899136

相关文章
|
云计算 运维 存储
aPaaS平台是什么?aPaaS与PaaS有什么区别?
aPaaS和PaaS都可以完成软件的开发和部署,都支持云端访问,而两者的差异主要体现在用户人群和使用环境不一样。
aPaaS平台是什么?aPaaS与PaaS有什么区别?
|
4月前
|
缓存 运维 Serverless
函数计算产品使用问题之在SD上安装了'inpaint anything'这个插件,但是不显示,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
存储 缓存 运维
函数计算产品使用问题之SD上安装了inpaint anything插件,但是不显示,该如何解决
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
349 0
|
5月前
技术笔记:Mocor平台SC6531模块添加
技术笔记:Mocor平台SC6531模块添加
39 0
|
5月前
|
安全 Shell 数据安全/隐私保护
【内网安全】 横向移动&IPC&AT&SC命令&Impacket套件&CS插件&全自动
【内网安全】 横向移动&IPC&AT&SC命令&Impacket套件&CS插件&全自动
188 0
|
6月前
|
iOS开发
iPad适配
iPad适配
71 0
|
6月前
|
算法 数据安全/隐私保护 异构计算
System Generator学习——使用 AXI 接口和 IP 集成器(一)
System Generator学习——使用 AXI 接口和 IP 集成器
70 3
|
6月前
|
存储 异构计算
System Generator学习——使用 AXI 接口和 IP 集成器(三)
System Generator学习——使用 AXI 接口和 IP 集成器
78 3
|
6月前
|
存储
System Generator学习——使用 AXI 接口和 IP 集成器(二)
System Generator学习——使用 AXI 接口和 IP 集成器
82 2
|
存储 算法 NoSQL
​浅谈分布式唯一Id生成器之最佳实践
​浅谈分布式唯一Id生成器之最佳实践
314 1