一、理论基础

1、AM335X的内存映射(参考AM335X手册)

2、启动过程

当芯片重新上电或者复位时,处理器开始执行位于芯片内部Boot_ROM(RBL过程,厂家固化,无法更改),对自身的运行环境做初始化后进入引导过程(MLO);

引导过程会先检测硬件设计的SYSBOOT引脚,根据不同的配置,选择从哪里(有NOR、NAND、MMC、SPI)开始检测是否有有效代码,此过程由硬件决定,软件无需参与,如果检测到有效代码,就将其加载到芯片内部的SRAM(第2个红框)中运行;

引导过程(MLO)的作用是把应用的代码加载到DDR(第3个红色框)内,并跳转至应用程序,至此系统软件开始得到有序执行。

二、需要解决的问题

根据以上理论有如下问题需要解决:(本文仅针对bootloader存放于SPI芯片)

1、如何生成MLO过程能识别出的有效代码

编译器生成的bin文件芯片并不能识别,因此需要将bin文件进行转换

1)可使用TI的ti_image工具,将bin文件进行转换(参考书籍,未验证)

2)编写脚本文件,将bin文件进行转换(已验证)

2、bootloader如何写入SPI芯片,以便CPU去识别

1)通过SPI烧写工具如J-LINK将bin文件直接写入SPI芯片(未验证)

2)另做一个程序,通过编译器在线调试的方式,直接将bin文件写入SPI芯片(已验证)

3、bin文件需要如何转换成数组,以便上述步骤2所做的程序通过将该数组写入SPI芯片

通过编写脚本文件将bin文件转换成数组的形式,以便软件通过SPI将该数组写入SPI芯片

三:所需准备的程序

综上所述,完成bootloader的开发需要准备4套程序,分别为:bootloader源码、bin文件转换脚本1、bin文件转换脚本2、bootloader烧写源码,其作用分别为:

1、bootloader源码:

实现bootloader的功能,即实现CPU上电或复位后,通过正确引导加载和跳转至应用程序;经编译器(作者采用的编译器为:CrossStudio for ARM)编译出来的bin文件如下:

2、bootloader源码的流程图如下:

流程图解释:

1)读取spi芯片的最前16个字节数据,该16个数据是在应用程序经编译生成的bin文件的基础上,通过bin转bin脚本工具增加进去的,分别表示:第1个4字节表示自定义ID号(用户定义);第2个4字节表示应用程序bin文件的数据长度(数据加载长度);第3个4字节表示需要加载的地址(AM335X加载地址为0x8000 0000);第4个4字节表示CRC验证值,即对加载的应用程序bin文件进行CRC计算,如果与第4个8字节CRC数据相同,表示CRC验证通过,保证加载的数据可靠。

2)任何一个环节失败,则表示应用程序出现问题,跳至等待bin文件的写入,用户可根据需求更改方法,比如开通CAN通讯或者485通讯,等待bin文件的写入。

应用程序的bin文件和spi存储芯片的数据如下,右边即是在应用程序程序基础上增加的16位字节数据。

2、bin文件转换脚本1:

下载链接:bin文件转bin文件转换工具-嵌入式文档类资源-CSDN下载功能:--检测原bin文件数据长度,增加至第1-4个字节--将AM335X的内部地址0x402F更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/u013131160/85131701

由于bootloader源码经编译生成的bin文件,CPU并不能正确识别,因此需要通过执行该脚本修改原bin文件,另外,bootloader烧写程序是一个字节一个字节的往SPI存储芯片里面写,而CPU加载SPI存储芯片里面的数据,是采用4个字节为单位,且高位在前,低位在后的形式,因此,该脚本需要完成2个功能即:1、以4个字节数据为单位,调换顺序;2、调换完后在最前面增加8个字节的数据,以便CPU能正确识别;执行此脚本后的bin文件如下:

前8个字节解释:0x00008115表示需要加载的数据长度;0x402F0400表示需要加载到CPU的地址(CPU芯片内部的SRAM地址);后面的数据表示在第1步编译生成的bin文件的基础以4个字节为单元进行顺序翻转;

3、bin文件转换脚本2:

下载链接:bin文件转换为C文件转换工具-嵌入式文档类资源-CSDN下载功能:将bin文件转换成C文件的数组,以便C程序可直接调用写入SPI芯片运行脚本前,需要修改脚更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/u013131160/85132519

第2的生成bin文件是不能通过bootloader烧写程序写入SPI存储芯片的,需要转换成16进制形式的数据才能写入,执行此脚本后的结果如下:

此脚本完成的功能:读取第2步生成的bin,每个数据前面增加0x,输出.c文件供第4步的bootloader烧写源码使用,

4、bootloader烧写源码:

通过在编译器上进行在线调试时,直接将将第3步生成的C文件(数组)写入SPI芯片,仅写一次即可,写完后相当于SPI芯片已经存储了bootloader,CPU每次上电或复位即可识别出该bootloader并加载运行;写完重新上电,通过在线调试的形式查看CPU内部SRAM地址的数据,可以验证是否从SPI存储芯片正确读取如下:

可见,CPU内部SRAM的数据与bootloader源码编译生成的bin文件完全对应;

AM3352 bootloader引导程序开发相关推荐

  1. USBISP/USBasp编程器给Atmega32U4下载Arduino bootloader引导程序

    用USBISP/USBasp编程器给ATmega32U4下载Arduino bootloader引导程序 ATmega32U4 bootloader引导程序是什么 引导程序下载接口与连接 配置熔丝位与 ...

  2. BootLoader引导程序制作及移植(二)

    2.添加命令 U-Boot中提供了丰富的命令,smdk2410板增加一些命令.我们为我们的开发板配置了一部分命令,找到下面的几行: #define CONFIG_CMD_CACHE #define C ...

  3. S32K144 Bootloader UDS 开发

    S32K144 文章目录 S32K144 前言 一.Bootloader驱动相关代码 1.CAN驱动 2.PIT驱动 3.FLASH驱动 二.Boot和App分区 1.Boot分区如下 2.App分区 ...

  4. 瑞萨IDE:CS+ for CC进行BootLoader升级时开发环境配置

    目录 1.分配Boot和APP程序地址 2.输出Boot和APP程序HEX文件 3.将Boot和APP程序HEX文件烧录到MCU BootLoader程序设计是常用的嵌入式升级方案之一,通过使用UAR ...

  5. 给Arduino烧录BootLoader引导程序,包括Atmega 16U2(通信芯片),Atmega 328P(主控芯片)

    需要用到USBtiny下载器和下载工具,USBtiny下载器如下所示: 下载工具在如下链接:https://download.csdn.net/download/weixin_36815313/112 ...

  6. 英飞凌TC397 BootLoader (SOTA)开发目录

    目录 欢迎大家来到TC397 BootLoader专栏,开始前我会先列出TC397 BootLoader学习大纲,同时可以作为大家学习.开发BootLoader的参考.点击下面的链接,可以传送到对应的 ...

  7. S12ZVM Bootloader设计开发

    S12ZVM Bootloader开发设计 文章目录 S12ZVM Bootloader开发设计 1 开发环境下载 2 CodeWarrior安装 3 工程创建 4 驱动开发 4.1 Cpu配置 4. ...

  8. windows无盘启动技术开发之传统BIOS(Legacy BIOS)引导程序开发之一

    by fanxiushu 2023-03-01 转载或引用请注明原始作者. 这个话题可能有点老,UEFI BIOS 已经大量存在,而Legacy BIOS最终会被取代. 但是也是作为无盘启动技术里不可 ...

  9. BootLoader引导程序制作及移植(一)

    U-Boot 实验指导书 一.获得U-Boot 源码 我们的光盘中提供了直接从U-Boot的官方网站下载的源代码,版本是1.3.2,放在src目录下.将u-boot-1.3.2.tar.bz2拷贝了工 ...

  10. windows无盘启动技术开发之UEFI(新一代BIOS)引导程序开发之一

    by fanxiushu 2023-04-04 转载或引用请注明原始作者. UEFI 是Unified Extensible Firmware Interface(统一可扩展接口)的简称. UEFI这 ...

最新文章

  1. 编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。...
  2. Leetcode 104. 二叉树的最大深度 解题思路及C++实现
  3. oracle 带有变量的语句_【成都校区】Oracle SQL语句之常见优化方法总结
  4. python 时间序列预测_使用Python进行动手时间序列预测
  5. Coding the Matrix Week 1 The vector 作业
  6. stm32新建工程(详细)
  7. 16位伪指令汇编程序查看内存
  8. linux删除一个目录下的所有空文件
  9. dns修复工具一键修复_ps污点修复画笔工具怎么用?修复工具组(一)
  10. JavaScript的简单复习
  11. java图形用户界面设计
  12. java地图自动定位_如何实现高德地图实现自动定位
  13. 聊天中批判性思维的应用
  14. Spark性能优化之-shuffle调优
  15. AutoCAD WS for iPhone, iPod toch, and iPad
  16. C:\WINDOWS\system32\Macromed\Flash\Flash32_11_5_502_110.ocx
  17. 8个提高摸鱼效率的python自动化脚本,提高打工人幸福感~
  18. emuelec 镜像太大无法写入U盘解决方法
  19. 546家企业被列为建议支持的国家级专精特新“小巨人”企业
  20. 单点登录(4):单点登录实现(附源码)

热门文章

  1. java8中的闭包Function/BiFunction
  2. 智能制造+机器视觉技术培训研讨会
  3. windows 系统快捷键小技巧
  4. 计算几何(基础部分)
  5. C4D教程大纲(R23)+笔记
  6. 污水流量计常见的三种电磁损耗的简单介绍
  7. Iredmail搭建
  8. Geos库学习之(四)——几何对象空间关系判断实例
  9. Device Tree(五)移植DM9000,并挂载NFS
  10. excel画正态分布与T分布