【Nordic进阶日记】填坑篇⑤ Nordic协议栈、MCU替换流程

关注+星标公众号,不错过精彩内容
作者 | 量子君
微信公众号 | 极客工作室


【Nordic进阶日记】专栏目录
第一章 填坑篇① Nordic计时功能总结
第二章 填坑篇② NRF52xxx内外部时钟设置
第三章 填坑篇③ Nordic RTC 和 FreeRTOS Tick
第四章 填坑篇④ ARM架构的OS支持
第五章 填坑篇⑤ Nordic协议栈、MCU替换流程


前言

Nordic 进阶日记系列博文涵盖了使用Nordic工具和框架、理解最佳实践以及解决技巧和窍门的主题。主要内容包括深入解析Nordic SDK的结构和用法、BLE应用开发、NRF52xxx系列硬件介绍与应用案例分析以及FreeRTOS在Nordic平台上的应用实践。

  • 本文描述,根据SDK example工程或者现有的项目,更换协议栈版本、MCU的注意事项;
  • Nordic开发中,最高效的方式是基于应用场景一致example 工程或者从现有的项目上直接衍生;
  • Nordic SDK下载官网
  • 本文以SDK 17.0.2中PCA10100(nRF2833 开发板)+ S113对应的examples\ble_peripheral\ble_app_uart\pca10100\s113示例,更新协议栈到S313。

一、替换协议栈

1.1 下载协议栈

  • 支持Ant+的协议栈由Garmin发布,在ANT+官网可下载。
  • 仅支持蓝牙的协议栈由Nordic发布,在Nordic官网可下载。
  • 协议栈1开头的为BLE协议栈,2开头的为ANT+ 协议栈,3开头的为ANT+ & BLE协议栈,比如S113仅支持BLE,S313支持BLE和ANT+。
  • 相对来讲,支持全功能的BLE协议栈占用资源较多。为丰富产品线,让用户有更多、更灵活的选择,Nordic会发布不同的BLE协议栈。比如S112,仅支持BLE peripheral/broadcaster,而且最多作为peripheral并行4路连接。S113蓝牙特性跟S112差不多,但是支持更多的MCU。S140同时支持BLE central/peripheral/broadcaster/observer,最多20路以任意角色的连接。
  • Ant+是Garmin家的,和Nordic紧密合作。大体流程是,Nordic发布新的BLE协议栈,比如S112,Garmin会跟进,在这个协议栈的基础上,增加对ANT+的兼容,发布S312协议栈。

1.2 确定FLASH / RAM

  • 如何确定Flash/Ram详细教程
  • 在协议栈文档Softdevice Specification中会详细描述,协议栈所需要的Flash Size以及最小的RAM需求。但是有些协议栈只能下到Release Note,移植手册。这时候就需要先将协议栈烧录到芯片中,通过Nrf Studio 查看Softdevice的大小。
  • 对于Application工程,FALSH START的地址明确要求为:If your Application uses a SoftDevice the start address for the FLASH memory must be set to the correct value for the corresponding SoftDevice, otherwise the Application will not run. This is because the SoftDevice expects the Application to start at one specific address。规则就是对应的协议栈的大小,即Softdevice大小为152Kb,则对应的应用工程FLASH START ADDRESS 为0x26000(152 * 1024 bytes) 。
  • 对于RAM的起始地址设置,Softdevice Specification只能提供最小需求的Size,当使用更多协议栈的特性,相应的Size也会增加。这个根据教程里的方法,就能获取到准确的Size。

1.3 在SDK增加新协议栈文件夹

  • 在nRF5_SDK_17.0.2_d674dde\components\softdevice此路径下,参考其他协议栈文件夹,添加新协议栈文件夹。
  • 在添加的文件夹下,参考其他文件夹路径,将下载的协议栈的include代码放置。

1.4 修改宏定义、include路径

  • Nordic SDK中,根据协议栈的不用会有很多兼容性的操作,关于协议栈类型和版本的宏定义是必须的。宏定义为 S113 NRF_SD_BLE_API_VERSION = 7。
    在工程中将旧协议栈 include 路径替换为新协议栈路径也是必须的。

1.5 修改错误

  • 为什么会有错误:当引入一个新的Softdevice时,SDK 里并没有对它的兼容。比如引入S313,SDK 17.0.2发布的时候,S313 还没有发布,或者Nordic并不会把所有的协议栈都集成到SDK中。此时,S313跟S113具有相同的BLE特性,那么S313必然不支持BLE Central相关的操作。那么这时候,需要开发者根据错误原因,加入相应的兼容处理。
  • 以下代码中,我们添加S313的宏处理,跟S113一样,屏蔽对BLE central的操作。
#if !defined (S112) && !defined(S312) && !defined(S113) && !defined(S313)
        case BLE_GAP_ROLE_CENTRAL:
            p_link->att_mtu_desired = p_gatt->att_mtu_desired_central;
            break;
#endif // !defined (S112) && !defined(S312) && !defined(S113)

二、替换MCU

2.1 确定兼容

替换MCU前,要确认它跟Softdevice 的兼容。查看Softdevice能查到它所支持的MCU型号。

2.2 确定FLASH/RAM

不同的MCU可能有不同的Flash/Ram 资源。Softdevice已经决定Application工程的Flash Start地址,那么MCU决定着Flash Size。

2.3 修改对应的宏

类似DEVELOP_IN_NRF52833、NRF52833_XXAA、BOARD_PCA10100等。

三、BootLoader工程

  • 替换Softdevice和 MCU,对于使用OTA的项目,BootLoader工程也受影响
  • 如果MCU的资源不变,那么BootLoader工程的Flash和RAM配置一般不需要更改。如果MCU资源变化,Flash增大或者减小,都需要相应的修改BootLoader Flash Start 地址。
  • 对于BootLoader的Flash空间计算:MCU Flash Size - 8kB(MBR参数,Nordic规定它们放置在Flash尾部8kB空间内)- Flash Start,那么这个空间一定要保证BootLoader工程的运行,同时不浪费。
  • 与协议栈和MCU相关的宏的修改。

总结

本文描述,根据SDK example工程或者现有的项目,更换协议栈版本、MCU的注意事项。

关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子君@极客工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值