如何将sam-ba的samd21j18a链接脚本适配到samd21e16b芯片
参考资源
- Microchip官方SAM-BA用户指南,包含完整的链接脚本配置规范、applet内存布局要求
- SAMD21系列数据手册第9章内存映射部分,可查询所有内存段的基地址、大小参数
- ASF框架自带的SAMD21系列板级支持包,包含同系列不同型号的默认SAM-BA链接脚本可做参考
- GNU链接器(ld)官方文档,用于理解链接脚本基础语法、内存段定义规则
appletAddr与appletMailboxAddr含义
- appletAddr:SAM-BA bootloader加载功能小应用(applet,例如Flash擦写、外设读写等功能小程序)的SRAM起始地址,必须落在bootloader未占用的SRAM区间,不能和bootloader自身运行的内存空间重叠
- appletMailboxAddr:bootloader和applet之间传递命令、参数、返回值的共享内存邮箱的起始地址,要求4字节对齐,且落在bootloader和applet都可访问的SRAM区间,通常放在applet加载地址前后的预留固定大小区间
SAMD21E16B的SRAM配置修改方案
原脚本适配的是SRAM更大的samd21j18a,原配置ORIGIN = 0x20002000, LENGTH = 0x00002000表示该版本bootloader占用了SRAM起始的8KB(0x2000)空间,剩下4KB给applet使用。
针对总SRAM为8KB(0x2000)、基地址为0x20000000的samd21e16b,首先确认你使用的SAM-BA bootloader实际占用的SRAM大小:官方默认的SAMD21 SAM-BA bootloader固定占用SRAM前2KB(0x800),修改后的SRAM配置如下:
sram (W!RX) : ORIGIN = 0x20000800, LENGTH = 0x00001800 /* sram, 总8KB - 2KB(bootloader占用) = 6KB分配给applet */
如果你的bootloader做了功能裁剪/扩展,占用大小有变化,只需按照以下规则调整即可:
- ORIGIN = SRAM基地址(0x20000000) + bootloader实际占用SRAM大小
- LENGTH = 总SRAM大小(0x2000) - bootloader实际占用SRAM大小
注意:tcl_lib中的
appletAddr要和上述ORIGIN值保持一致,appletMailboxAddr建议放在applet SRAM区间的末尾预留256字节位置,按上述配置计算为0x20001F00。修改后需验证bootloader占用区间、applet加载区间、邮箱区间三者无重叠,否则会出现applet加载失败、命令无响应的问题。
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

