s32k linux,S32K1XX调试--S32K116的flash擦写程序移植

S32K1XX调试--S32K116的flash擦写程序移植

55943f4202ab0d31fbe2fd27fccc1abc.png  

c29537b84118803b2e42f9406633dd98.png

日期:2020-09-21

浏览:160    评论:0

核心提示:1、环境S32DS IDE2、背景NXP官方出的开发工具 S32KDS提供了图像化配置工具PE(Processor Export),所有外设可以在界面中配置,然后自动生成代码。这样虽然方便了点,但个人感觉对学习不是很有利。操作起来方便,但对底层接触的就比较少,想看他底层部分,嵌套太多层,看起来很累。所以我参考他们的寄存器版的程序,自己编写自己所需。但有些没有寄存器版本,例如flash的擦写部分就没有参考程序,所以我只能参考PE生成的程序进行移植。3、调试过程先找个官方基础例程,作为

1、环境

S32DS IDE

2、背景

NXP官方出的开发工具 S32KDS提供了图像化配置工具PE(Processor Export),所有外设可以在界面中配置,然后自动生成代码。

这样虽然方便了点,但个人感觉对学习不是很有利。操作起来方便,但对底层接触的就比较少,想看他底层部分,嵌套太多层,看起来很累。

所以我参考他们的寄存器版的程序,自己编写自己所需。但有些没有寄存器版本,例如flash的擦写部分就没有参考程序,所以我只能参考PE生成的程序进行移植。

3、调试过程

先找个官方基础例程,作为基础移植工程。

移植过程还是用原来官方程序的Project_Settings文件夹下 S32K116_16_flash.ld、S32K116_16_ram.ld、startup_S32K116.S、system_S32K116.c,后面需要关注到这几个文件

配置好外设,实现定时器,串口功能等之后(确保功能实现,说明移植相对没问题),就开始移植PE生成程序flash_partitioning_s32k116的flash_driver.c,flash_driver.h两个文件。对应添加头函数,对应初始化,调用两个文件所提供的函数。程序如下:

INT_SYS_DisableIRQGlobal();

ret = FLASH_DRV_EraseSector(&flashSSDConfig, APP_PFLASH_START_ADDR, flashSSDConfig.PFlashSize - APP_PFLASH_START_ADDR);

INT_SYS_EnableIRQGlobal();

上面对应的APP_PFLASH_START_ADDR是我打算存放app程序的开始地址,INT_SYS_DisableIRQGlobal与INT_SYS_EnableIRQGlobal是开启和关闭全局中断,其他参数可以参考原PE生成程序

运行起来,发现程序卡死,跳转到DefaultISR,解决方法可以参考以下链接:S32K1XX调试–程序跑飞到DefaultISR

解决了DefaultISR问题,又出现跳转到HardFault问题,解决方法可以参考以下链接:S32K1XX调试–快速定位HardFault

定位到是FLASH_DRV_CommandSequence函数的问题,多次查找后,发现是相应的函数内容没有从flash拷贝到RAM,程序跑起来跳转过去,相当于跳转到了一个空函数,所以出现HardFault

这时考虑到可能是链接以及启动程序问题,于是打算大干一场,处理移植问题(操作之前还是很有必要备份程序)。

准备开始替换Project_Settings文件夹下的几个文件,到PE所生成的程序flash_partitioning_s32k116处去找,从对应文件处把内容全选复制过来,到现有程序全选粘贴(因为有些文件命名可能不一样,但目的是一样的),然后编译

编译过程中,可能还会有报错,比如某些参数未定义,例如init_data_bss未定义,这个在startup.c和startup.h中有定义,再从PE处移植过来即可

可能还会有其他问题,再移植添加即可。

其他

因为自己在这部分卡了几天,所以就把调试过程编写出来供参考,希望能够帮到你。

编写或是解释难免有错,欢迎指正。

另附参考所提到的两个链接:

[1]. S32K1XX调试–程序跑飞到DefaultISR

[2]. S32K1XX调试–快速定位HardFault

打赏

本文转载自:网络

所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486

最近资讯中心

最新资讯中心

相关评论

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值