telink:tc321x如何开发
1 拿到一个新的sdk应该咋开始开发呢?
1 需求分析 >> 查看sdk目录介绍 + 芯片内存/flash分配 + ble连接数限制/流程限制等;
2 文档查阅 >> 官网文档分布浏览,例程代码分布浏览,选择baseSample建立概念;
3 环境搭建 >> 环境搭建、编译、下载、调试串口打开,实现最小改动验证;
4 代码修改 >> 想想要干嘛,然后干就完了;
2 相关文档都有哪些呢?
telink IoT studio 用户指南 >> 编译软件的配置以及可能出现报错,适合遇到实际问题再来看;
DBT 烧录调试工具指南 >> 讲了DBT工具的用法和升级,以及其他内置DBT工具用法;还有命令行使用DBT;
包含了flash各地址的读写,debug和断点调试之类的;先能跑就行,遇到问题再实际结合吧,不然也不知道看啥;
多连接sdk 开发指南 >> sdk目录介绍,mcu地址分配,ble的原理和api接口,调试方式;
通过"sdk目录介绍"了解sdk的功能和结构,"地址分配"了解资源是否满足功能需求,ble原理先看了代码再看;
单连接sdk开发指南 >> \
datasheet >> \
logic >> \
telink的文档资料并不多,文档中很多细节也没有提及或更新,只有上面这几个;
3 flash资源
tc3215x sram >> datasheet写的64KB;
tc3215x flash >> datasheet写的是512KB,但是开发板flash读回来的chipType对应flash为2MB,开发板芯片是调试芯片和实际出货芯片不一致;
DBT工具实际擦写是512KB;
目前生成的bin文件是106kb,可以做AB分区升级;
telink的代码是运行在flash上的,部分时序要求高的代码会帮运到sram中执行;上电启动后由内部固化的bootRom判断magicFlag值来决定启动地址;
由于flash在执行擦写操作的时候,没有资源同时读操作代码段,所以矛盾闭环,flash的擦写操作函数得帮运到sram中执行;
如果全局变量赋了初值,全局变量在sram中,它的初值在flash中,所以要memcpy过来;.bss >> Block Started by Symbol 只标记位置和长度的起始块;

3.1 串口升级能搞吗?
tc_ble_single_sdk上有个串口例程,将其移植后改改就行;
移植例程先跑起来,跑起来再优化,都没跑起来就想着优化是很费劲的;为什么呢?当代码跑起来后修改范围就可以确定了,
知道要做什么就比较快,不知道要做什么的时候会花很多的时间去探索怎么做;
4 sdk目录结构是咋样的呢?
application >> 应用层协议,如usb,keyboard等,功能类似profile
boot >> xx.s 和 xx.link 启动文件
build >> xx.link和编译产生文件
common >> 跨平台库和定义,如assert, BIT(x)等
drivers >> 芯片上的外设驱动,gpio,timer,uart,flash
proj_lib >> frimware_encrypt.h 和 xx.a
stack >> ble蓝牙协议栈封装后的xx.h文件,源码应该在proj_lib中的xx.a中;
vendor >> 提供了几个基本例程,还有feature_test和common目录
feature_test 主要是ble特性的测试例程;
common 主要是board_config.h 和 ble的功能比如pairing,sdp,还有一些先放着;
config.h/drivers.h/tl_common.h >> 重点查阅
telink的文档支持和sdk例程支持不咋好,例程基本不能直接用,要改改才能用;
评估下可知工作内容大概就是以vendor中的acl_connection_demo作为例程修改,
可能会涉及到在applicaiton中修改添加profile,大概会调用drivers目录下的外设驱动编写的外设应用代码;
4.1 那么acl_connection_demo的目录结构又是咋样的呢?
app.c/h >> 广播包,GAP_event, connect/disconnect event,user_init_normal(), flashProtection
user_init_normal():ble的整个系统初始化,数据处理初始化,低功耗处理初始化;
这里有个问题要注意下,那就是广播包和广播回复包,这个回复包是不是覆盖取决于设备代码怎么执行的;
app_att.c/h >> 从设备的gatt_tbl,以及它的初始化 my_gatt_init( &gatt_tbl );
app_ui.c/h >> userInterface,用户接口处理逻辑,tc321x上的蓝牙从设备的业务逻辑处理;比如蓝牙从设备的按键处理;
app_buffer.c/h >> 主/从设备的fifo_buff[ ],默认xx_max_num是4条,可能有点小,先放着;
app_config.h >> ble系统的feature配置宏,CHIP_TYPE在编译器里配置的,先放着把;
main.c >> pm设置,sleepMode设置,sysclk设置,gpio_init( ), user_init_normal(), main_loop();
根据目录结构可知,想要了解代码功能主要是user_init_normal(), main_loop(); 的功能;修改的话这几个文件基本都需要修改;
5 相关补充下,telink 各架构有什么区别?
T-MCU 是 Telink 为 BLE/射频深度定制的自研RISC-MCU 架构,在低功耗和实时性上有优势,但在生态和长期可维护性上不如 RISC-V MCU;
T-MCU 所有中断优先级相同,依次处理;协议栈的systemTimer/RF中断最大延时为200us,建议app中断处理控制在50us内;
B91与B92的区别主要集中在在 SoC 级别的资源与特性;B92 的定位明显偏向“大协议栈 + 多角色 + 多连接”

6 telink IoT Studio使用
报错链接不到对象的时候,如何添加磁盘c文件和h文件?
右键工程名 >> Refresh (F5) >> 刷新工程自动导入文件;
如何手动导入c文件?
问问AI
文件在project下显示出来,但还是不参与编译怎么办?
右键该文件 >> Resource Configurations >> Exclude from Project ok/ Include in Build ng
6 小结
所以到这里,关于一个新的sdk的开发流程和步骤都明确了,剩下的就是对代码的需求功能的开发编写,以及碰到的注意事项再补充把;
ps:部分缩写
/***
blc >> bluetooth controller
bls >> bluetooth stack
pm >> power management
ps:关于宏改了之后,在IoT中要clean了工程再继续编译,不然宏不会起效;
ps:三主两从 >> 芯片可以作为3个主接入3个periph,作为2个从接到2central;
***/

浙公网安备 33010602011771号