I.MX RT1176在MCUX环境下的开发笔记

项目场景:

I.MX RT1176定义为介于MCU与MPU之间的跨界CPU,性能强大,外围丰富,随选用1176替代原来的MPC8309,同时将vxworks替换成FreeRTOS系统。


一、IDE环境

基于eclipse的调试环境,有过eclipse开发经验的话很容易上手

1.引脚外设可视化配置功能


 对于初学者比较友好,可以快速了解芯片功能及基本配置。但是到后期代码成熟之后,尤其是增加自己手写代码之后会和软件自动生成的代码有冲突,发生文件被改写等现象。所以建议熟悉该芯片之后尽量不用配置工具,直接参考SDK代码手动添加即可。

2.内存分配及链接脚本 

可任意分配内存大小并指定链接脚本

 

 具体使用方法可参见官方知道手册

二、开发过程中遇到的问题

1. XIP执行模式

自己开发的板子下载不进去程序,不管是哪种boot模式都不行


 最初考虑的是配置引脚问题

对i.MXRT1170来说,BootMode决定启动模式,配置成1:0是正确的即Internal Boot。BootCFG管脚决定启动设备,设置不当的话肯定也会影响启动,每个电平代表的意义已经在1170的原理图上标注说明。无论是BootMode管脚还是BootCFG管脚他们只在RT1170的POR_B管脚上升沿的时候锁存一次,之后这几个管脚就不再被BootROM使用而后客户可以随意使用。有时启动成功有时启动失败需要检查下BootCFG这几个管脚在上电的时候(POR_B上升沿)是否正确(因为BootCFG管脚和以太网的几个信号复用,有可能受这个影响),当然这么多信号不便于抓取,但是RT1170实际上提供了几个寄存器(SRC_SBMR1和SBMR2),即RT1170在POR_B上升沿所采样出来的Boot_Mode和BootCFG管脚电平会被保存在这几个寄存器里,所以当发现启动失败的时候,可以用Jlink连接上芯片,通过读取寄存器方式获取该寄存器以判断是否是上电时BootCFG管脚信号有不对的情况。如果获取到的SRC_SBMR1全是0的话,那就应该不是BootCFG管脚信号造成的。

排查完引脚配置问题之后最终确定是选用的Flash型号太老,不支持SFDP模式,更换Flash之后解决问题。

2.SDRAM无法启动

选用了一款差分时钟的DDR1,结果通不上,查询手册是1176的SEMC不支持差分时钟。

 更换SDRAM

3.程序与用户存储共用Flash

Flash有32M,但是一般程序很少能有这么大,所以考虑分一半用于用户参数存储。但是由于是XIP模式,程序代码读取会和参数读取冲突造成系统崩溃,解决方案就是将代码移植到RAM中执行,参数读写通过FlexSpi操作Flash。

参考官方手册使用脚本指定代码文件到RAM中

 4.静态库开发

移植原项目的C++静态库工程,新建立的主工程是C,编译失败,重新创建C++主工程编译 通过。

静态库工程不要勾选fPIC,否则静态库函数链接不到主工程。 

4.报错RAM_PREL31 against.text

这个错误是由于使用了C++,不同内存区域跨度超过32M,网上有详细解释,修改内存布局编译通过。

5.malloc与vPortMalloc最好不要混合使用

会导致不确定性的内存问题,最好的办法就是FreeRTOS使用heap_4模式,所有内存分配全部使用vPortMalloc。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值