【1024平头哥开发套件体验】- sc5654 启动流程分析
文件目录如下
目录结构介绍:
Project
├── Boards - 板级代码
├── Chips - 芯片级代码
├── Packages - 组件代码
├── generated - 生成可执行文件
├── script - 编译脚本
└── app - 应用目录Z
├── include - 应用头文件
└── src - 应用源文件
├── app_audio_adc.c - 音频采集
├── app_audio_pa.c - 功放
├── app_battery.c - 电池管理
├── app_init.c - 应用初始化
├── app_key_user.c - 应用按键
├── app_led.c - LED灯
├── app_lpm.c - 低功耗
├── app_lpm_user.c
├── app_main.c - 入口文件,包含main函数
├── app_net.c - 应用网络处理
├── app_player.c - 播放
├── app_sys.c - 系统接口
├── audio - 语音
├── aui_cloud - 云端交互
├── cli_app.c - 通用命令行
├── cli_aui.c - 语音命令行
├── cli_gpio.c - GPIO命令行
└── vad - SRAM VAD算法
软件架构介绍: YoC
YoC总共分四层
硬件规范层: CSI 层定义了 SoC 外部设备的统一接
核心服务层: 包含了 Rhino 操作系统内核、设备管理框架、低功耗框架、高级安全可信计算(TEE)、网络协议、蓝牙协议栈、虚拟文件系统、网络管理器
应用组件层: YoC 平台提供了大量的应用组件,面向不同的应用领域,满足不同技术需求的选择,提供更加丰富的软件生态。
业务框架层: YoC 提供多种应用领域中软件框架,进一步简化应用方案的开发难度。
主函数启动流程:
程序架构为阿里云平头哥 YoC架构
相关参考资料连接:
https://occ.t- head.cn/development/series/index?id=3801383434384187392&type=kind&softPlatformType=1
首先会运行前端Loader
由芯片级包中.S 汇编引导启动(chip_sc5654(v7.4.0.1))
[M0]CLK_SYS = 320M
[M0]BASE = 00002b10
[M0]LEGTH = 0000009b
[M0]SDRAM Init Ok(4*16Mbit Cap)
[M0]Build:Apr 2 2020,10:17:27
[M0]Load Risc boot
[M0]Dst=0x02780000 Src=0x00070000 Len=0x00010000
[M0]Check RISC First Inst:
[M0]02780000, Success!
Welcome boot2.0!
build: Jan 27 2021 15:27:32
load img & jump to [prim]
silan_boot_dsp ...addr:0x00080000, load_addr:0x02000000, len:755152
Check DSP First Inst:
0000af02, Success!
copy dsp over ...
load&jump 0x1a3000,0x2300000,351388
all copy over..DSP Boot Mode: sdram
j m
j 0x023codec_adrb_create, g_rb_mic:0x20c959c g_rb_ref:0x20c95ac
codec_adrb_create, mic:0x20c96e0 ref:0x20c96f0
[DSP][Schd]Main_Task start
然后运行主函数
主函数以及调用函数解析
Main:->
//C++必须调用
posix_init();
xx_system_init();
//板级基本初始化:(base_init.c)
board_base_init(); ->
//首先初始化3个串口
uart_csky_register(0); /* UART1 */
uart_csky_register(1); /* UART2 */
uart_csky_register(2); /* UART3 */
//初始化基本外设寄存器
spiflash_csky_register(0);
adc_csky_register(0);
iic_csky_register(0);
//YoC初始化:(app_init.c)
yoc_base_init(); ->
//板级初始化 (初始化YoC需要资源)
board_init(); ->
//初始化 console BT WiFi 引脚
board_pinmux_config();
//初始化调试串口 115200 波特率
console_init(CONSOLE_UART_IDX, 115200, 512);
//初始化信息打印
ulog_init();
//初始化分区表
//初始化KVFS
aos_kv_init("kv");
// 初始化环境
event_service_init(NULL);
//文件系统初始化
fs_init();
//系统事件处理
sys_event_init();
//应用系统初始化
app_sys_init();
//设置LED闪烁模式
app_set_led_state(0);
//初始化每个任务的事件循环
aos_loop_init();
//初始化vad
app_softvad_init();
//音频数据采集
board_audio_init();
//按键应用初始化
app_button_init();
//开启aos 循环任务运行
aos_loop_run();
到此程序就进入系统运行系统任务。
文章转载自:平头哥芯片开放社区 作者:辰玖