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

相关文章
|
XML 安全 C++
DBus类型系统以及在Qt和C++ 中的使用(二)
DBus类型系统以及在Qt和C++ 中的使用
887 0
|
物联网 5G 智能硬件
物联网卡:物联网卡不支持语音通话,是如何实现设备间的数据传输和通信的?
物联网卡(IoT SIM卡)通常被设计用于支持物联网(IoT)设备之间的数据传输,而不直接支持语音通话功能。这是因为物联网设备主要关注的是数据的收集、传输和处理,而不是语音通信。为了实现设备间的数据传输和通信,物联网卡及其背后的技术采用了多种方法,主要包括但不限于以下几种方式:
物联网卡:物联网卡不支持语音通话,是如何实现设备间的数据传输和通信的?
|
编解码 vr&ar 图形学
惊世骇俗!Unity下如何实现低至毫秒级的全景RTMP|RTSP流渲染,颠覆你的视觉体验!
【8月更文挑战第14天】随着虚拟现实技术的进步,全景视频作为一种新兴媒体形式,在Unity中实现低延迟的RTMP/RTSP流渲染变得至关重要。这不仅能够改善用户体验,还能广泛应用于远程教育、虚拟旅游等实时交互场景。本文介绍如何在Unity中实现全景视频流的低延迟渲染,并提供代码示例。首先确保Unity开发环境及所需插件已就绪,然后利用`unity-rtsp-rtmp-client`插件初始化客户端并设置回调。通过FFmpeg等工具解码视频数据并更新至全景纹理,同时采用硬件加速、调整缓冲区大小等策略进一步降低延迟。此方案需考虑网络状况与异常处理,确保应用程序的稳定性和可靠性。
711 1
|
监控 网络协议 Linux
彻底解密:select,poll底层系统调用的核心思想原理
彻底解密:select,poll底层系统调用的核心思想原理
|
安全 关系型数据库 MySQL
"深度解析:MySQL密码修改与远程登录配置全攻略,保障数据库安全与灵活访问"
【8月更文挑战第9天】MySQL是广受青睐的开源关系型数据库系统,其安全性和易用性对DBA和开发者至关重要。本文通过实例解析MySQL中用户密码更新及远程登录配置,确保数据库安全访问与高效管理。首先介绍如何分步修改密码,包括登录MySQL、选择数据库、使用`ALTER USER`命令更新密码,并刷新权限。接着,指导如何配置远程访问,涉及调整MySQL监听地址、授权用户远程登录、检查网络设置及测试远程连接。遵循这些步骤,可强化数据库安全性并实现灵活管理。
964 0
理解dtsi中的&
理解dtsi中的&
402 0
|
XML Java Android开发
Android Studio App开发之监听系统广播Broadcast的讲解及实战(包括接收分钟到达广播、网络变更广播、定时管理器等 附源码)
Android Studio App开发之监听系统广播Broadcast的讲解及实战(包括接收分钟到达广播、网络变更广播、定时管理器等 附源码)
897 0
|
测试技术 开发工具 芯片
Open Chip Community (OCC)
Open Chip Community (OCC) 是一个开源芯片社区,旨在推动开源芯片的发展和普及。OCC 的目标是为开发人员提供一个开放透明的平台,让他们可以共同协作、创新和分享开源芯片技术。
1134 3
|
存储 前端开发 安全
前端401错误 & 解决方法:响应拦截器
前端401错误 & 解决方法:响应拦截器
前端401错误 & 解决方法:响应拦截器
|
数据采集 存储 定位技术
ArcGIS校园3D展示图制作详细教程
ArcGIS校园3D展示图制作详细教程
510 0