概述
目录
前言
一、STM32启动方式
1、启动方式
2、ISP下载和IAP下载的不同
二、I.MAX6ULL启动方式
1、启动方式选择
2、支持的启动设备
3、启动设备选择
前言
I.MAX6U是一款NXP出品的,528~900MHz的Cortex-A7内核的MPU
一、STM32启动方式
1、启动方式
使用过STM32芯片的人肯定都知道,STM32的启动方式可以通过BOOT0和BOOT1两个引脚来设置,这两引脚是可以外接电路来控制高低电平的,这样就可以控制STM32单片机上电的启动方式了。如下表,启动方式的选择。
BOOT0 | BOOT1 | 启动模式 | 说明 |
0 | X | 用户闪存存储器启动 | 也就是FLASH启动 |
1 | 0 | 系统存储器启动 | 用于串口下载 |
1 | 1 | SRAM启动 | 用于在SRAM中调试代码 |
使用最多的启动模式就是第一种闪存启动,因为在STM32中,程序一般也就几百K不会太大,而单片机内部都会集成有几百K甚至上M的FLASH,所以一般就直接从内部FLASH启动了。单片机上电后直接从主存储器的0x8000000地址开始启动。如下图(STM32大容量产品闪存模块组织)
2、ISP下载和IAP下载的不同
对于第二种从系统存储器启动,这里小伙伴可能会有疑问了,为什么说是用于串口下载呢?又是怎么实现串口下载的呢?其实原因就是STM32出厂的时候已经在系统存储器中固化了一段引导程序(Bootloader),当选择从系统存储器启动的时候,这段引导程序会从指定串行外设(不同的芯片支持的外设不同,参考链接)接收程序下载到主存储器,然后跳转到主存储区去执行,这就是ISP(In System Programing)在系统编程的原理。ISP中的引导程序是固化在System Flash中的,我们是没法改变的。可以使用FlyMcu软件来下载程序。
说到串口下载,其实除了系统自带的ISP下载方式外,还可以通过IAP(In Application Programing)在应用编程的原理来下载。IAP 就是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。要想实现串口升级也是需要一段引导程序(Bootloader)的,不过这段引导程序是我们自己编写的存储在User Flash的。这段引导程序的作用就是用户闪存存储器模式启动下,在开始执行应用程序之前,先判断是否需要通过指定的外设(这个可以自行设计了)接收程序,如果是则会接收并写入到应用程序区域,最后再跳转到应用程序去执行,从而实现串口升级的功能。比如可以使用ymodem协议,上位机作为ymodem主机使用超级终端下发固件,boot作为ymodem从机接收固件。 如下图,ISP引导程序、IAP引导程序、应用写程序在Flash中的分布示意图:
二、I.MAX6ULL启动方式
1、启动方式选择
I.MAX6ULL支持多种启动方式,不同的启动方式其启动要求也不一样。跟STM32单片机的启动方式选择类似,I.MAX6ULL的启动方式是通过BOOT_MODE0、BOOT_MODE1两个引脚来选择的。
BOOT_MODE1 | BOOT_MODE0 | 启动模式 | 说明 |
0 | 0 | FUSE启动模式 | 也就是FLASH启动 |
0 | 1 | 串行下载 | 可以通过USB或UART将程序下载到外置存储设备中 |
1 | 0 | 内部BOOT启动模式 | 用于在SRAM中调试代码 |
1 | 1 | 保留 |
串行下载:
串行下载的意思就是可以通过 USB或者 UART将代码下载到板子上的外置存储设备中,我们可以使用 OTG1这个 USB口向开发板上的 SD/EMMC、 NAND等存储设备下载代码。这个下载是需要用到 NXP提供的一个软件mfgtool,一般用来最终量产的时候将代码烧写到外置存储设备中的
内部 BOOT模式:
在此模式下,芯片会执行内部的 boot ROM代码,这段 boot ROM代码会进行硬件初始化 (一部分外设 ),然后从 boot设备 (就是存放代码的设备、比如 SD/EMMC、 NAND)中将代码拷贝出来复制到指定的 RAM中,一般是 DDR。这个 boot ROM代码都会做什么处理呢?首先肯定是初始化时钟, boot ROM设置的系统时钟如图 所示:
当 BOOT_MODE设置为内部 BOOT模式以后,可以从多种启动设备中启动。
2、支持的启动设备
I.MAX6ULL还支持多种启动设备,比如可以从 SD/EMMC、 NAND Flash、 QSPI Flash等启动。在STM32中,启动设备就是内部FLASH,就没有选择启动设备这一步了。但是在I.MAX6ULL中就不一样了,程序上M是常事,要在芯片内集成几百兆的FLASH成本是很高的,所以一般会选择将程序放置到外部的存储设备中,启动的时候再将程序拷贝到链接地址(运行地址)去运行,这样不仅降低了成本和制造工艺的难度,灵活性也大大增高,用户可以按需选择存储设备节省成本。那么I.MAX6ULL具体支持从哪些设备中启动呢?启动设备是怎么选择的呢?
① 、接到 EIM接口的 CS0上的 16位 NOR Flash。
② 、接到 EIM接口的 CS0上的 OneNAND Flash。
③ 、接到 GPMI接口上的 MLC/SLC NAND Flash NAND Flash页大小支持 2KByte、4KByte和 8KByte 8位宽。
④ 、 Quad SPI Flash。
⑤ 、接到 USDHC接口上的 SD/MMC/eSD/SDXC/eMMC等设备。
⑥ 、 SPI接口的 EEPROM
3、启动设备选择
跟启动方法选择类似,也是可以通过引脚来控制的,分别为BOOT_CFG1[7:0]、 BOOT_CFG2[7:0]、BOOT_CFG4[7:0]这 24个配置 IO,他们分别对应LCD的 24根数据线 LCD_DATA0~LCD_DATA23。这24个引脚和BOOT_MODE1、 BOOT_MODE0共同组成了 I.MAX6ULL的启动选择引脚。但这24个引脚都需要用到吗,不然,其实只要用BOOT_CFG2[3]、BOOT_CFG1[7:3]
参考资料:
《Cortex M3权威指南(中文)》
《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.3》
(48条消息) I.MAX6ULL与STM32启动方式对比_hurryddd-CSDN博客_imx6ull和stm32区别
最后
以上就是犹豫小蝴蝶为你收集整理的I.MAX6ULL与STM32启动方式对比前言一、STM32启动方式二、I.MAX6ULL启动方式的全部内容,希望文章能够帮你解决I.MAX6ULL与STM32启动方式对比前言一、STM32启动方式二、I.MAX6ULL启动方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复