芯片开放社区
直播中

刘杰

7年用户 1327经验值
私信 关注
[技术讨论]

【1024平头哥开发套件开发体验】- sc5654 启动流程简析

【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();

//初始化分区表

partition_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();



到此程序就进入系统运行系统任务。

文章转载自:平头哥芯片开放社区 作者:辰玖

更多回帖

发帖
×
20
完善资料,
赚取积分