关于s3c6410的SD卡启动

发布时间:2024-09-13  

      要研究裸机程序的编写,必须要有一个“全裸”的环境。友善提供的superboot可以提供执行用户自定义程序的能力,但其实这样运行的程序环境还是依赖于superboot的, 那些内存初始化、时钟初始化,串口初始化等工作都已经由superboot做了。tiny6410支持nandflash和sd卡启动两种模式,nandflash的烧写还是依赖superboot,所以比较简便的方法是通过sd卡启动,superboot本身也是通过sd卡启动的。

      从网上搜了一下这方面的资料,主要参考文章来来去去就几篇, 三星的S3C6410_Internal_Rom_Booting.pdf是一份比较有用的资料,当然还有其中一些文章也比较有用,例如djyos的sd卡启动试验。这些文章描述s3c6410的要点总结如下:

      (1) s3c6410启动过程分成BL0, BL1, BL2几个阶段, 其中BL0是固化在s3c6410内部的IROM中的, 该段程序根据所选择的启动模式从存储介质加载BL1. s3c6410支持从多种存储介质中启动,nandflash, sd卡,sdhc卡,OneNand, MoviNand.... BL1和BL2存储于这些存储介质中。这里我主要关注sd和sdhc卡.

      (2) BL0在加载BL1前已经做了很多工作,sd控制器初始化,关闭看门狗等。

      (3) 对于sd卡, BL1位于 (totalSector - 18) 的扇区;对于sdhc卡,BL1位于(totalSector-1042)的扇区。BL1由BL0加载到 0x0C000000处运行,大小为8K.

       

知道了上面几点,就可以制作sd启动卡了,可以将所编写的裸机程序放到BL1的位置。下面编写一个最简单的点灯程序(LED1~LED4全亮):

led.s:


 1 .text

 2 .code 32

 3 .global _start

 4 _start:

 5            ldr r0,=0x7f008800

 6            ldr r1,=0x11111111

 7            str r1,[r0]

 8            ldr r0,=0x7f008808

 9            ldr r2,=0xff0f

10            str r2,[r0]

11 loop:

12            b loop

13  


makefile:       


CC=arm-linux-gcc

LD=arm-linux-ld

OBJCOPY=arm-linux-objcopy

CFLAG=-c

LDFLAG=-e _start -Ttext 0x0c000000


led.bin: led 

      $(OBJCOPY) -O binary $< $@


led: led.o

      $(LD) $(LDFLAG) $? -o $@


led.o:led.s           

      $(CC) $(CFLAG) $< -o $@


clean:

      rm *.o

      rm led

      rm led.bin


      下面要将led.bin写入BL1.使用的是2G的sd卡,所以应该写到 -512 * 18处。网上的文章都说用WinHex写入,我使用的是linux环境,没有WinHex可用,不过其实dd命令就可以对绝对磁盘扇区做读写。还有一个问题就是要知道sd卡的大小, 用fdisk命令就可以了:

      $ sudo fdisk -l /dev/sdb

      Disk /dev/sdb: 2059 MB, 2059403264 bytes

      207 heads, 37 sectors/track, 525 cylinders

      Units = cylinders of 7659 * 512 = 3921408 bytes

      Sector size (logical/physical): 512 bytes / 512 bytes

      I/O size (minimum/optimal): 512 bytes / 512 bytes

      Disk identifier: 0xb2a60e0e


      Device Boot Start End Blocks Id System

      /dev/sdb1 1 525 2010469 b W95 FAT32


      所以要写入的地址为 2059403264 - 18 * 512 = 2059394048


      然后用dd命令写入led.bin :

      $ sudo dd if=./led.bin of=/dev/sdb seek=2059394048 bs=1

      至此一张可启动的sd卡就完成了,插入tiny6410, 选择sd卡启动模式,就可以看到板子启动时4灯全亮。

      注:友善宣称它提供的SDFlasher.exe可以不论sd和sdhc卡都可以支持,从而优于三星提供的IROM_Flushing_Tool, 三星的要选择是sd还是sdhc。其实原理很简单,SDFlasher.exe写入时不论是-18扇区还是-1042扇区都写入。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>