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 只标记位置和长度的起始块;

  111

  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 的定位明显偏向“大协议栈 + 多角色 + 多连接”

  222

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;

***/

 

posted @ 2025-12-29 17:18  rls_v  阅读(19)  评论(0)    收藏  举报