S5P6818裸机开发(1)

您所在的位置:网站首页 三星开发软件是什么 S5P6818裸机开发(1)

S5P6818裸机开发(1)

2024-01-19 18:54| 来源: 网络整理| 查看: 265

注:本文以 S3C2440 和 S5P6818为例,以S5P6818为主  1、三星 Steppingstone技术介绍

        在介绍Steppingstone技术之前,需要先了解一下常用的Flash之间的区别,常见的有NOR Flash,NAND Flash,eMMC,SD等,具体有哪些区别自行百度科普,这里只需要知道烧写到NOR Flash中的代码可以直接运行,其他的都不可以。NOR Flash因为结构的原因,和SDRAM一样可以直接运行代码,也导致了NOR Flash的成本较高,显然不能满足大容量的需求,再以NAND Flash为例,容量大,但是代码不能直接运行,系统就不能启动。

所以有以下解决方案:

方案1:开发板同时设计有NOR Flash和NAND Flash,一部分代码运行在NOR Flash上,例如uboot,uboot运行之后初始化 NAND控制器 和 SDRAM,同时把用户代码重定向到SDRAM中运行,重定向就是把用户代码从NAND Flash或者其他存储设备中拷贝到 SDRAM中,至此整个系统就可以运行在SDRAM内存中。

方案2:大多数情况下,开发板中没有NOR Flash,只有一块NAND Flash或者eMMC,甚至是一张SD卡,那么程序是怎么运行的,这里就要说到三星的Steppingstone(垫脚石)技术。 

        SOC在上电后可以自动从Flash中拷贝一部分代码到SOC的片内SRAM,所以在这一部分的代码中,通常必须完成下面内容: 初始化CPU时钟,Flash控制器,SDRAM等,来实现代码重定位到内存中。

        总结:Steppingstone技术就是SOC自动帮用户从Flash中复制一段代码到SOC片内SRAM中运行,完成代码重定向之后便跳转到SDRAM中运行用户程序。复制代码的大小取决于片内SRAM的大小,S3C2440 4KB,S5P6818 56KB

2、S3C2440启动流程

S3C2440支持NOR/NAND Flash,EEPROM启动,这里主要介绍 NOR Flash和NAND Flash

1)NOR Flash启动:

        ARM CPU上电后通常从0地址开始执行,通常我们可以把负责启动的BootLoader(uboot)或者裸机开发中的程序烧写在NOR FLash中(此时NOR Flash的地址必须作为0地址),而把内核和文件系统放到NAND FLash中,由uboot从NAND Flash中加载到SDRAM。在这里提一下嵌入式Linux系统的大概流程 开发板上电→运行uboot→加载内核→挂载根文件系统(Linux挂载的第一个文件系统称为根文件系统)→启动应用程序。

2)NAND Flash启动:

        由于代码不能直接在NAND Flash上运行,所以Steppingstone技术就闪亮登场了,CPU自动复制NAND Flash的前4K代码到片内SRAM中运行。在这4K代码中,完成了部分硬件初始化,所有代码的重定位和跳转到SDRAM,和NOR启动的区别就在于4K代码自动copy,还有重定位的是所有代码,这里为什么要重定位包括uboot在内的所有代码,原因就是4K内存太小,uboot的代码都放不下,只能执行uboot的一部分功能。完成重定位和跳转之后,垫脚石的使命就算是圆满完成。

 

思考:了解过Flash原理的,可能都会有这么一个疑问,NAND Flash不能像NOR 和 SDRAM 一样,通过地址线发送地址,在很短的时间内就会在数据线上得到数据,也就是NAND Flash不能直接访问,需要通过NAND 控制器,可是在CPU上电的一瞬间,压根没有程序运行,怎么配置NAND 控制器?

答案就是,通过外部引脚输入高低电平来选择参数,一些可以通过寄存器设置的则使用参数默认值,一般默认值即最安全的值,能够兼容大多数芯片。见下图所示

 3、S5P6818启动流程

        S5P6818支持的启动模式相比S3C2440来说就比较多了,内部ROM启动方式有带纠错的NAND启动、SD/MMC启动、SPI 串行 EEPROM启动、UART、USB,我所用的这一款开发板是8G的eMMC,但是如果只是裸板开发的话,这里我们使用SD卡烧写程序来演示裸板程序,同样你也可以把uboot 内核 文件系统都烧写在SD卡上来运行。

 1)启动模式选择

         在这么多的启动模式中,怎么选择启动模式?有了上面的S3C2440的介绍之后,相信大家已经有了一些想法,就是通过引脚配置高低电平来选择

         选择了启动模式 SD MMC之后,那么问题来了,6818的SD/MMC控制器是支持3通道的,当前开发板上已经有了一块eMMC,此时如果我们想使用Micro SD卡来运行我们的裸板程序的话,怎么让CPU选择我们的SD卡?或者说在这三个通道中怎么选择想要的通道?

        同样是通过配置引脚电平状态 ,见下图所示

 

CPU 会优先从SD0读取代码,读取代码失败后,则会转向下一个(SD2通道)。这里又有了一个疑问,CPU怎么知道读取的数据不正确呢,这里先简单说一下,具体后面还会涉及到,6818的boot代码是有格式要求的,在某一个位置的必须是一个指定的数据,否则就认为读取失败,转向下一个SD通道。

按照以上启动的要求,那么我们的板子就应该这么设计:eMMC接到SD2,Micro SD卡插槽接到SD0,确保Micro SD卡的启动优先级最高,方便我们的板子系统凉凉时,可以通过SD卡抢救。

 

 2)SD/MMC启动流程

S5P6818内置了20KB的ROM,在SD/MMC启动模式中,0地址就指向了Internal ROM的入口,ROM中预置了代码能够支持多种启动方式,并且能够把用户代码从多种存储媒介中加载到内部SRAM(56KB)中,然后从SRAM中运行。

结合以上信息,启动流程大概分为这么几步:

1、开发板上电后,CPU从0地址开始执行代码,就是内部ROM的起始位置

2、内部ROM的代码首先要识别外部存储媒介是是什么类型,然后初始化相关的控制器

3、把前56KB代码拷贝到内部SRAM

4、通过设置PC跳转到内部SRAM的位置开始运行

5、执行硬件初始化,代码重定位等

4、总结

        S3C2440和S5P6818这两款SOC都使用到了Steppingstone技术,都是CPU自动地帮用户执行一部分代码,不同的是,S5P6818使用到了IROMBOOT技术,能够支持的存储外设类型更多,相对来说流程也就更复杂,也许现在看来感觉两款CPU的启动流程差不多,要说的是差别体现在了代码设计上,之前也提到6818的前56KB代码的格式有一定要求,代码设计上就复杂了许多,这个下一篇安排。

插播一条消息:在我后续的学习过程中,偶然得知S5P4418 和 S5P6818并非三星公司的作品,而是韩国一家公司Nexell的作品。这让我想起来,之前吐槽6818的手册看上去乱糟糟的(有可能是我太菜),和2440的手册根本就是两种风格,现在实锤了。特意去Nexell官网看了下,确实有这两款SOC!另外,仔细看了下手册封面,是的,大意了,Powered by NEXELL



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3