思澈科技软件开发工具包  2.20
SDK快速入门

1. 开发环境准备

需要安装的软件列表

  1. Sifli env 和 SiFli SDK (从微盘下载)
  2. Keil V5.32或以上, armcc V6 版本或以上
    将arm和jlink的路径加入Windows环境变量PATH, 如 C:\Keil_v5\ARM\ARMCLANG\bin 和 C:\Program Files (x86)\SEGGER\JLink_v672b, 有助于一些脚本的使用
  3. Segger Jlink, V6.72b 版本或以上 Jlink下载地址
  4. Visual Studio 2017或更高版本

需要的硬件

  1. Windows PC * 1
  2. ARM仿真器 * 1
    Note
    仿真器的供电和EVB板有冲突,需要关闭仿真器的供电。如果出现仿真器连接不成功,可以检查一下Jlink的供电硬件跳线。下图是常见Jlink的供电跳线,需要移除
  3. USB type-C 线 * 1

    用于给EVB供电,以及连接EVB上的FTDI USB2UART芯片,用于抓取EVB串口数据
  4. EVB开发板 * 1套 包含一个接口底板EI-LB55XXXX001, 和一个CPU子板LB551, 以及屏幕子板(屏幕不同,相应的子板型号不一样。)

    EVB 开发板接口一览图

编译必须的配置

  1. 解压env到PC上,如 c:\work\env
  2. 进入 env 目录,可以运行本目录下的 env.exe ,如果打开失败可以尝试使用 env.bat
  3. 关联文件夹右键”ConEmu Here”菜单

添加Keil Flash烧写驱动

将SifliSDK\tools\flash\keil_drv\sf32lb55x目录下sf32lb55x.FLM,复制到C:\Keil_v5\ARM\Flash下 (此处为默认的Keil安装目录,如果安装到其它目录则放到相应的文件夹下)

2. 编译示例工程

编译evb工程(DSI屏)

  1. 打开SifliSDK目录,右键”ConEmu Here”打开ConEmu,执行批处理set_env.bat(设置相关的环境变量,如果不关闭ConEmu,只需设置一次,打开新的ConEmu需要再次设置)
    Note
    set_env.bat 里面有设置 Keil 的安装目录(默认是 C:/Keil_v5),用户需要根据自己的安装目录进行修改。
  2. 切换到SifliSDK\example\watch_demo\project\ec-lb551
  3. 用命令 scons --target=mdk5 –s 生成Keil工程
  4. 然后用Keil打开project.uvprojx 编译
    Note
    ec-lb555的工程类似编译

编译模拟器工程

  1. 打开SifliSDK目录,右键”ConEmu Here”打开ConEmu,执行批处理set_env.bat
  2. 切换到SifliSDK\example\watch_demo\project\watch_simu
  3. 命令scons --target=vs2017 -s 生成vs工程, 然后用visual studio2017打开工程project.vcxproj 编译运行
    Note
    运行时如果Visual studio提示找不到SDL2.DLL,则需要添加路径env\tools\Python27到环境变量PATH,然后重启下Visula studio
    如果安装的是其他版本的visual studio, 打开工程时,需要按照提示改变windows SDK的版本。

3. 烧写EVB

SDK提供三种烧录EVB的方式,其中一种使用Keil的环境,另外两种使用Jlink的工具。

Note
正常情况可以不用改变跳线boot_mode, 如果烧写持续出现问题, 或者用户程序死机,可以将跳线boot_mode置于VDD一侧,然后按reset重启进入boot模式,再次尝试烧写。烧写完成之后,跳线boot_mode置于GND一侧,按reset重启正常运行。

3.1 用Keil烧录EVB

使用Keil烧录EVB flash需要首先添加Keil Flash烧写驱动, 将SifliSDK\tools\flash\keil_drv\sf32lb55x目录下sf32lb55x.FLM,复制到C:\Keil_v5\ARM\Flash下 (此处为默认的Keil安装目录,如果安装到其它目录则放到相应的文件夹下)

EVB至少需要烧写2部分:

  • Flash Table (只需要烧录一次,用于复位后ROM从FlashTable读取地址然后跳转到用户代码), 具体用法参考 安全引导加载
    用户收到EVB的时候,flash table 已经烧录为默认,除非flash被破坏,一般情况下,客户可以忽略这个步骤。
  • 工程代码

烧录Flash table

  1. 打开工程SifliSDK\example\flash_table\project.uvprojx
  2. 按照最后一节选择Keil Flash烧写驱动
  3. 选择flash1作为编译目标,然后编译,烧写

烧录工程代码

  1. 打开SifliSDK\example\hal_example\project\ec_lb551\project.uvprojx
  2. 按照最后一节选择Keil Flash烧写驱动
  3. 编译后,烧写

选择Keil Flash烧写驱动

  • 打开工程选项,按下图选择Flash驱动:

3.2 用Jlink烧写EVB

Jlink 的版本此处以v672b为例,安装路径D:\Software\JLink_v672b

添加Jlink Flash烧写驱动

  1. 在Jlink程序目录D:\Software\JLink_v672b\Devices目录下新建目录”SiFli”
  2. 将SifliSDK\tools\flash\jlink_drv\sf32lb55x 下的elf文件拷贝到前面新建的SiFli目录(每个elf对应一个flash的烧写驱动)
  3. 修改Jlink注册的Device列表,增加前面添加的文件路径,运行参数等,如下图:

附图中添加的xml内容:

<!-- -->
<!-- SiFli Z0(Cortex-M33 devices)-->
<!-- -->
<Device>
<ChipInfo Vendor="SiFli" Name="SF32LB5XX" Core="JLINK_CORE_CORTEX_M33" WorkRAMAddr="0x20000000" WorkRAMSize="0x40000" />
<FlashBankInfo Name="Internal Flash1" BaseAddr="0x10000000" MaxSize="0x400000" Loader="Devices/SiFli/SF32LB5XX_INT_FLASH1.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
<FlashBankInfo Name="External Flash2" BaseAddr="0x18000000" MaxSize="0x2000000" Loader="Devices/SiFli/SF32LB5XX_EXT_FLASH2.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>
<!-- -->
<!-- SiFli SF32LB55X(Cortex-M33 devices)-->
<!-- -->
<Device>
<ChipInfo Vendor="SiFli" Name="SF32LB55X" Core="JLINK_CORE_CORTEX_M33" WorkRAMAddr="0x20000000" WorkRAMSize="0x40000" />
<FlashBankInfo Name="Internal Flash1" BaseAddr="0x10000000" MaxSize="0x2000000" Loader="Devices/SiFli/SF32LB55X_INT_FLASH1.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
<FlashBankInfo Name="External Flash2" BaseAddr="0x64000000" MaxSize="0x2000000" Loader="Devices/SiFli/SF32LB55X_EXT_FLASH2.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
<FlashBankInfo Name="External Flash3" BaseAddr="0x68000000" MaxSize="0x2000000" Loader="Devices/SiFli/SF32LB55X_EXT_FLASH3.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
<FlashBankInfo Name="External Flash4" BaseAddr="0x12000000" MaxSize="0x2000000" Loader="Devices/SiFli/SF32LB55X_EXT_FLASH4.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>

烧写Bin/hex文件到Flash

  1. 打开Jlink,连接,并选择SiFli的device(注意SF32LB55X代表EVB的flash驱动)
  2. 选择swd接口,配置速度,选择对应的bin烧写到某一地址(可以烧ROM/RAM/FLASH都可以),Jlink速度取决于Jlink的硬件,通常可以设置到4MHz以上,芯片可以支持最高10MHz.
  3. 烧写结果
  4. Hex文件的烧写,只需将loadbin 改成loadfile即可,且不需要带地址

3.3 集成到windows,右键烧写hex文件

添加完了的Jlink 的驱动以后,为了平时调试方便,可以将hex文件的烧写集成到windows的右键菜单,但只能烧写hex文件因为其自带地址,bin文件不带地址所以不支持。

  1. 添加右键菜单
  2. 右键目录烧写,将会把目录内的文件改为.hex后缀,并逐个烧写
  3. 也可以单独选择烧录其中一个hex文件(只支持.hex后缀的文件)
Note
为了使得BLE 应用运行正常,请在串口输入
  1. nvds reset_all 1
  2. nvds update addr 6 <蓝牙地址> 例如 nvds update addr 6 1234567890C8,注意蓝牙地址分类需要保持一定的格式,建议C8不要改动,其他的用户可以自行改变 然后按reset重启
Warning
56和58系列工程,编译完后在build目录下会生成download.bat和download.jlink文件,运行download.bat就可以下载,不要用鼠标右键模式下载hex文件。如果点了,会更改download.jlink文件内容导致下载失败,请删除被更改的download.jlink文件,并重新编译用download.bat下载。

4. 上电引导流程

阶段 函数 文件路径
中断向量表 ResetHandler SifliSDK\drivers\cmsis\sf32lb55x\Templates\arm\startup_bf0_hcpu.S
MPU设置, BOOTMODE检查 SystemInit() SifliSDK\drivers\cmsis\sf32lb55x\Templates\system_bf0_ap.c
RO/RW/ZI初始化 __main()
RT_THREAD_MAIN入口 $Sub$$main SifliSDK\rtos\rtthread\src\components.c
rtthread_startup() SifliSDK\rtos\rtthread\src\components.c
硬件初始化 rt_hw_board_init()
HAL_Init();
RCC 配置 HAL_PreInit() SifliSDK\drivers\boards\ec-lb551XXX\drv_io.c
HAL_MspInit()
PIN脚配置 BSP_IO_Init()
rt_system_heap_init
LOG输出口初始化 rt_console_set_device
驱动初始化 rt_components_board_init();
上层初始化 rt_application_init() SifliSDK\rtos\rtthread\src\components.c
main_thread_entry SifliSDK\rtos\rtthread\src\components.c
上层中间件 rt_components_init
Main() 工程main函数
启动线程调度 rt_system_scheduler_start()
Note
EVB开发板插入PC后,PC会枚举四个个串口,其中编号最小的是Boot/LCPU的终端,第二个大的是HCPU的终端,目前建议用户关注HCPU的UART输出。其余两个串口暂时没有分配。