卢骏 · 2020年06月26日

CORTEX-A8裸机系列:第一章 九鼎开发板x210-v3介绍

之前,跟着朱有鹏大神,一起学习物联网。记录下了一些笔记。现在将这些笔记,整理发到博客。供大家学习参考。大神,用的开发板,是九鼎的x210-v3开发板,因此我也是使用的这个开发板。如果大家想学习物联网的话,可以购买朱有鹏大神的视频,跟着学习。

第一章 九鼎开发板x210-v3介绍

1、开发板信息

CPU: 三星S5PV210,基于ARM cortex-A8

内存:512M DDR2

FLASH: 4GB INAND

LCD屏:7寸,带触摸

电源: 9V1.5A供电适配器

2、交叉编译器

arm-2009q3.tar.bz2:三星官方的编译器,推荐使用该编译器。

3、开关机

电源开关使用软按键,长按电源开关键才开启电源。使用电源芯片对电源进行管理。

复位键用来给系统关机。

4、安装USB驱动

驱动在A盘\tools\USB驱动\x210_android_driver

5、Fastboot

Fastboot命令,提供了对开发板刷机功能。

5.1 命令

fastboot devices 查看当前连接的设备

fastboot flash xxx(分区) xxx(文件) 对指定分区烧录文件

fastboot reboot 用来重启设备

5.2 分区

fastboot提供了如下的7个分区:bootloader,kernel,ramdisk,config,system,cache,userdata。通过fastboot命令,可以查看各个分区以及分区起始地址和长度。
1.png

使用fastboot烧录android4.0.4镜像

fastboot flash bootloader android4.0.4/uboot.bin 将uboot烧录到bootloader分区

fastboot flash kernel android4.0.4/zImage-android 将kernel烧录到kernel分区

fastboot flash system android40.4/x210.img 将文件系统烧录到system分区

6、DNW刷机

以下是DNW刷机的步骤:

1) 开发板置于USB启动

2) 长按电源键不放,使用dnw下载x210_usb.bin。下载地址是0xd0020010,这部分代码是负责初始化dram。

3) 使用dnw下载uboot.bin。下载地址是0x23e00000,下载完后,即可松开电源键。此时uboot就在dram中运行了。

4) 使用fdisk -c 0 进行重新分区

5) 使用fastboot进行刷机

DNW刷机下,使用的是串口0。

7、破坏系统

当需要进行裸机编程时,需要将inand中自带的uboot给刷掉。就需要破坏系统。

进入到开发板的linux系统中。执行以下的命令:

busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync
sync

如果是qt系统,执行以下的命令:

busybox dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1 count=1 conv=sync
sync
8、linux下刷SD卡uboot

以下是在PC的linux环境下,将uboot刷到SD卡的步骤:

1) 将window下的VMware USB Arbitration Service服务开启(参考http://blog.163.com/solylee@1...

2) 在虚拟机下,将SD卡设备连接到虚拟机

3) 将uboot_sd_fusing文件夹拷贝到linux下

4) 使用ls /dev/sd* 查看SD卡的设备名,一般是sdb

5) 执行 ./ nand_fusing.sh SD卡设备名,对SD卡进行刷uboot

9、在android2.0中不能使用fastboot

要先使用fdisk -c 0进行重新分区,就可以使用fastboot了

10、FLASH存储器

NANDFLASH分为SLC和MLC。

SLC:容量小,价格高,不易产生坏块,可以不用ECC校验

MLC:容量大,价格低,易产生坏块,但是要ECC校验。

eMMC(embeded MMC)为MMC协会所订立的、主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。

下图是NAND和eMMC的区别。对于NAND,处理器通过NAND接口对NAND进行操作,而对于eMMC,处理器通过标准接口对NAND控制器进行操作,不直接对NAND进行操作。
2.png

eMMC和SD的接口是一样的。

iNand 是sandisk公司出产的eMMC

Movinand 是三星公司出产的eMMC

Onenand 是三星公司出产的一种nand。有两种类型,muxed和demuxed。

对于muxed型,地址引脚和数据引脚结合在一起,而demuxed型芯片这两个引脚是分开的。当关注的是减少引脚数时,选择muxed OneNAND可能好一些。另外,muxed OneNAND只工作在1.8V,demuxed的密度较低,不到1 Gbit,demuxed有1.8V 和3.3V两种选择。如果muxed或demuxed器件的密度超过1 Gbit,则只能选择1.8V的工作电压。

11、SD/MMC通道接口

S5PV210支持4个SD/MMC通道,通道0和通道2依次用作启动通道使用。SD/MMC通道0用于连接板载MMC。外部启动时要使用SD/MMC通道2。

以下是SD/MMC的地址空间。
3.png
4.png

从芯片的存储地址分布,看出SD/MMC是属于SFRS区域的。

12、RAM

SRAM : 静态内存,容量小,价格高,访问快,不需要软件初始化直接上电就能使用。

DRAM : 动态内存,容量大,价格低,访问慢,上电后不能直接使用,需要软件初始化后才可以使用。

13、PC与嵌入式系统区别

PC机 : 很小容量的BIOS(norflash) + 很大容量的硬盘(类似于NANDFLASH) + 大容量的DRAM

一般的单片机 : 很小容量的NORFLASH + 很小容量的SRAM

嵌入式系统 : 因为NORFLASH很贵,所以现在很多嵌入式系统不用NORFLASH,一般用外接的大容量NAND + 外接的大容量DRAM + SOC内置SRAM

14、uboot命令下擦除inand

使用mw命令和movi命令的组合。

mw 0x30000000 0x0 0x100000, 将内存地址0x30000000开始的0x1000000大小擦除成0。

movi write u-boot 0x30000000 把uboot分区的内容用内存地址0x30000000开始的数据擦除

15、通过usb下载,程序超过16KB怎么办

通过USB下载最多也只能下载96KB大小的bin,如果bin大于96KB肯定SRAM放不下会出错。

如果用SD卡驱动,那么mkv210_image.c决定了bin文件最大不能超过16kb。

两种解决办法:

第一: 在USB下载时,先下载一个x210_usb.bin,然后再将裸机程序链接到0x23e00000,然后再修改dnw中下载地址,将裸机代码下载到0x23e00000运行。(这个时候不需要重定位了。因为程序已经在DRAM中运行了)

第二:在SD卡启动时,将整个裸机工程分为2部分,第一部分大小16KB以内,第二部分放剩下的(方在SD卡的后面的某个扇区开始的位置,比如放在第50个扇区开始的位置),然后再裸机代码中进行重定位(SD卡中重定位)。

系列其他篇

原文首发于骏的世界博客
作者:卢骏.
更多Arm技术相关的文章请关注Arm技术博客极术专栏,每日更新。
推荐阅读
关注数
23585
内容数
1035
Arm相关的技术博客,提供最新Arm技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息