资源描述
摘要
摘 要
随着社会经济和科学技术的发展,嵌入式技术的应用越来越多走进人们的生活,由于Linux具有对各种设备的广泛支持性,因此,能方便地应用于机顶盒、IA设备、PDA、掌上电脑、WAP手机、车载盒以及工业控制等智能信息产品中。与PC相比,手持设备、IA设备以及信息家电的市场容量要高得多,而Linux嵌入式系统的强大的生命力和利用价值,使越来越多的企业和高校表现出对它极大的研发热情。图像采集及无线通信技术是两大相当关键的应用门类,在各种场合的应用都相当广泛,因此,我们通过开发一个智能小车,采用S3C2440核心板,L298N作为电机驱动,用摄像头实现图像采集,Wifi无线网卡实现数据传输,使其能够沿着轨道寻迹,同时实施图像采集,把图像传输到后台服务器,达到以应用嵌入式Linux操作系统平台来建立一个实现远程寻物模型,便于查找物品,尤其适合在大型仓储中应用,同时也能够对整个仓库进行监控,实现安全管理。
关键词:嵌入式系统 无线通信 ARM 图像采集
19
目录
目 录
摘 要 I
第一章 绪论 1
1.1设计背景 1
1.2嵌入式Linux发展现状及趋势 1
1.3方案论证 2
1.4采用的基本设计思路和要实现的基本功能 3
第二章 嵌入式LINUX应用 4
2.1嵌入式Linux开发环境建立 4
2.2U-boot的移植 4
2.2.1U-boot简介 4
2.2.2U-boot目录结构 5
2.2.3主要功能 5
2.2.4移植u-boot 5
2.3Linux内核移植 8
2.3.1配置Linux内核 8
2.3.2网卡驱动添加 9
第三章 系统硬件设计 12
3.1控制主板 12
3.2电源电路的设计与分析 14
3.3驱动电路的设计与分析 15
3.3.1电机驱动电路的设计与分析 15
3.3.2光电隔离电路的设计与分析 15
3.3.3光耦光电管驱动电路设计与分析 16
3.3.4码盘测速接口电路设计与分析 16
3.4寻迹电路设计与分析 17
3.4.1红外发射与接收管的基本工作原理 17
3.4.2红外寻迹电路板的整体分布与抗干扰设计 17
3.4.3红外寻迹板的基本工作原理 18
第四章 系统软件设计 20
4.1主程序的设计 20
4.2寻迹算法 20
4.3红外传感器驱动的设计 23
4.4PWM驱动的设计 23
4.5无线通信的设计 23
4.5.1上位机程序 24
4.5.2下位机程序 24
第五章 系统测试 26
5.1测试环境 26
5.1.1跑道图介绍 26
5.1.2寻迹过程说明 26
5.2通信测试 27
5.2.1图像采集测试 27
5.2.2系统软件测试 28
5.3测试问题及解决办法 30
第六章 总结与展望 31
6.1总结 31
6.2展望 32
致 谢 33
参考文献 34
第一章 绪论
第一章 绪论
1.1 设计背景
2010年4月,为促进校企合作,引导企业参与赛项设计、提供技术支持和后援保障,推动工学结合人才培养模式的改革与创新,引导高职教育在嵌入式技术高速发展背景下的相应专业领域的教学改革与专业调整,检验高职学生在嵌入式技术应用方面的职业能力以及质量、效率、成本和安全意识。全国职业院校技能大赛组委会决定将“嵌入式产品开发”作为竞赛项目之一。
1.2 嵌入式Linux发展现状及趋势
关于嵌入式系统(Embedded Systems)的定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、软驱、硬盘、显示卡、显示器、Modem、网卡、声卡等均是由嵌入式处理器控制的,嵌入式系统市场的深度和广度,由此可见一斑。尽管如此,它的市场价值也许仍然超过了您的想象:今天,嵌入式系统带来的工业年产值已超过了1万亿美元。
自由开源软件在嵌入式应用上受到青睐,Linux日益成为主流的嵌入式操作系统之一。随着MOTOROLA手机A760、IBM智能型手表Watch Pad、SharpPDA、Zaurus等一款款高性能“智能数码产品”的出现,以及Motorola、Samsung、MontaVista、Philips、Nokia、IBM、SUN等众多国际巨头的加入,嵌入式Linux的队伍越来越庞大了。目前不少大学、研究机构和知名公司加入了嵌入式Linux的开发工作,成熟的嵌入式Linux产品不断涌现。
2004年全球嵌入式Linux市场规模已达9150万美元,2005年有1.336亿美元,2006年有1.633亿美元,2007年已达2.011亿美元,每年平均增长30%。
一个完整的系统,当然要包括硬件和软件两个部分,这就好像必须要有丈夫和妻子,才能组成一个完整的家庭。尽管嵌入式系统有着无比广阔的市场需求和发展前景,但嵌入式系统的发展,多年来却经历了一个比相对后期产生的个人计算机(PC)更为曲折和痛苦的历程。随着微处理器的产生,价格低廉、结构小巧的CPU和外设连接提供了稳定可靠的硬件架构,那么限制嵌入式系统发展的瓶颈,就突出表现在了软件方面。尽管从八十年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有Vxwork、pSOS、Neculeus和Windowss CE,但仍然有大量的嵌入式系统摒弃操作系统于不顾,而仅仅包括一些控制流程。当然,我们可以说在嵌入式系统相对简单的情况下,这些控制流程足以应付。但是,当嵌入式系统的功能复杂后,也就是说需要提供更完善的服务的时候,简单控制逻辑就不够用了。毋庸置疑,对于任何一个产品来说,服务的内容和质量,都是价值的源泉和生存的基础。我们不妨做一个夸张而又通俗的比喻,也许雇一个保姆,能够解决生活的一部分后顾之忧,但一个真正意义上的家庭,必须需要一位妻子。那么是什么造成嵌入式系统领域大量的黄金、钻石王老五至今孑然一身呢?特殊的人才有特殊的需求,显然我们需要的是一个身材苗条、容貌姣好、身体健康、聪慧善良、上得厅堂下得厨房,甚至不向我们的工资袋多看一眼的贤内助,也就是说,嵌入式系统需要的是一套高度简练、友善界面、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统。
人们可以发现,以上所说的要求简直就是在形容Linux。更为令人心动的是,除上述优点之外,Linux与生俱来的优秀网络血统,更为今后的发展铺平了一条宽广平坦的大路。这里的网络,并不仅仅指Internet,关于Linux在Internet中的优势,将需要专门著文论述,这里仅仅提醒大家注意的是另一个也许可以说较Internet更为广阔的市场:家庭网络。尽管全世界每分每秒都有成千上万的优秀软件工程师致力于将个人电脑(PC)的操作系统变得更加简单易用,但令人遗憾的是,对某些特定的年龄和社会阶层的人群来说,要想开启精彩的网络世界大门,依然有一道难以逾越的门槛。事实就是社会上关于个人电脑的普及班和书籍依然铺天盖地,而我们却从未听说过关于操作电视或者空调的培训。LINUX系统和嵌入式设备的结合,无疑将会对智能住宅及数字家电事业,注入无限澎湃的动力。这并不是什么超前的设想,许多具有高前瞻性的企业,已经从研发阶段过渡到生产阶段,推出了多姿多彩的嵌入式LINUX操作系统的PDA、相机、或者更为概念化的咨讯家电。如推出全球最小的嵌入式操作系统内核——夸克(QUARK),而闻名于世的网虎国际(XLinux),已与Intel成功合作,将夸克应用于Intel去年推出的strongARM芯片上。人们可以在这一平台上享受上网和听MP3的乐趣。而据我所知, LINUS本人在归家的途中已经在利用手机指令家中的咖啡壶为自己准备咖啡了。
1.3 方案论证
基于嵌入式Linux智能小车基本组成是:
1)主控模块主要采用三星公司的S3C2440作为主控芯片,它是一种低功耗,32位ARM9处理器,具有强大的嵌入式操作系统运行能力,并具有丰富的外设接口,核心板下面是扩展MCU外围部件的一块电路板,包括SD卡接口、USB接口、多媒体(扬声器和话筒等)接口、网卡接口、摄像头接口、串行通信接口、LCD液晶显示接口、按键和LED指示接口、I2C和SPI接口、GPIO接口、实时时钟电源和系统总线扩展口等。
2)光电隔离接口驱动模块负责对整个机器人的供电系统进行控制,采用两组电源,一组用于驱动电机运转,另一组用于MCU系统及接口电路供电,当两组之间的器件需要信号传输的,可以有效的通过光电隔离进行,从而可靠的防止信号串扰,避免因电机运转产生的强电磁波通过线路产生干扰。
3)该模块还实现将ARM发出的驱动信号通过光电隔离传送到电机驱动芯片上,从而控制四只直流电机的运转和停止。具体的,可控制直流电机转动方向、速度(脉冲宽度控制,简称PWM)
4)机器人摄像头接口模块,该模块实现对ARM和摄像头之间的信号进行传输。一方面,ARM通过该板下达对摄像头的采集命令;另一方面ARM板通过元线网卡把采集到的图像传到上位机上,以便实时观察仓库中的物品。
1.4 采用的基本设计思路和要实现的基本功能
1)利用光电循迹技术,编程获取轨道信息,控制嵌入式智能小车能在轨道上前进、后退、左转和右转。
2)当光电循迹板检测到特定的停止位置信息后,通过GPIO接口,将停止信息传送给ARM,ARM立即下达命令停止直流电机运转,使嵌入式智能小车在规定的标记点上停止。
3)小车将停止点的信息用摄像头把实时图像用无线网卡传送到后台服务器,服务器根据图像特征再给小车发送下一步运行指令。
第二章 嵌入式Linux应用
(应该是奇数页开始)
第二章 嵌入式Linux应用
2.1 嵌入式Linux开发环境建立
通过运用crosstool-0.43.tar.gz脚本工具包来制作自己的交叉编译器。并且此编译器能够编译u-boot-1.3.4,linux-2.6.14内核。本实验旨在让读者学会一种编译制作交叉编译器的方法。在实际开发中,大多根据编译目标,选择一些编译好的、经过测试的交叉编译器。
crosstool是由美国人Dan Kegel(毕业于加(利福尼亚)州工学院)开发的一套可以自动编译不同匹配版本gcc和glibc,并作测试的脚本程序。下载地址:
在
制作之前确保你的系统中已经安装了下面的工具包:bison,flex,build-essential。如果系统没有这些软件包,必须进行安装。在ubuntu发行版中,使用apt-get命令即可非常方便的进行安装。
安装方法:
一、ubuntu 系统中可以使用超级用户(root),调用 apt-get 命令
#apt-get –d install flex
二、可以使用dpkg 命令安装已经下载的软件包
如:我们将下载包放到 /home/linux/downloads/下,可以使用如下命令安装flex。
2.2 U-boot的移植
2.2.1U-boot简介
U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。
2.2.2U-boot目录结构
* board 目标板相关文件,主要包含SDRAM、FLASH驱动;
* common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;
* cpu 与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;
* driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)
* doc U-Boot的说明文档;
* examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;
* include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
* lib_xxx 处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;
* net 与网络功能相关的文件目录,如bootp,nfs,tftp;
* post 上电自检文件目录。尚有待于进一步完善;
* rtc RTC驱动程序;
* tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具。
2.2.3主要功能
* 系统引导 支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统
* 支持NFS挂载、从FLASH中引导压缩或非压缩系统内核;
* 基本辅助功能 强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲;
* 支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;
* CRC32校验,可校验FLASH中内核、RAMDISK镜像文件是否完好;
* 设备驱动 串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;
* 上电自检功能 SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号;
* 特殊功能 XIP内核引导。
2.2.4移植u-boot
建立自己的平台类型
(1)解压文件
#tar jxvf u-boot-1.3.4.tar.bz2
(2)进入U-Boot源码目录
#cd u-boot-1.3.4
(3)创建自己的开发板:
#cd board
#cp smdk2410 qq2440 –a
#cd qq2440
#mv smdk2410.c qq2440.c
#vi Makefile (将smdk2410修改为qq2440)
#cd ../../include/configs
#cp smdk2410.h qq2440.h
退回U-Boot根目录:#cd ../../
(4)建立编译选项
#vi Makefile
smdk2410_config: unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
qq2440_config: unconfig @$(MKCONFIG) $(@:_config=) arm arm920t qq2440 NULL s3c24x0
arm: CPU的架构(ARCH)
arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。
qq2440: 开发板的型号(BOARD),对应于board/qq2440目录。
NULL: 开发者/或经销商(vender),本例为空
s3c24x0: 片上系统(SOC)
(5)编译
将:ifeq ($(ARCH),arm)CROSS_COMPILE = arm-linux-endif
修改为:ifeq ($(ARCH),arm)CROSS_COMPILE = arm-softfloat-linux-gnu- (arm gcc 为3.4.5)endif
#make qq2440_config;
#make all
本步骤将编译u-boot.bin文件,但此时还无法运行在qq2440v3开发板上。修改部分:
1) 修改中断禁止部分 (cpu/arm920t/start.S)
# if defined(CONFIG_S3C2410)
ldr r1, =0x7ff /*根据2410芯片手册,INTSUBMSK有11位可用 */
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
2) 修改SDRAM的配置(board/samsung/smdk2410/lowlevel_init.S)
#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
改为:(参考K4S561632手册“8192 refresh cycles / 64ms”可知刷新的周期为:7.8125us)
#define REFCNT 1268 /* period=7.8125us,HCLK=100Mhz, */
3) 时钟的配置 (board/smdk2410/ smdk2410.c)
在board/ smdk2410/ smdk2410.c的board_init函数,首先修改为异步总线模式:具体修改在clk_power->LOCKTIME = 0xFFFFFF之前加上:
__asm__(“mcr,0,r1,c1,c0,0\n” “orr r1, #0xc0000000\n”, “mcr p15,0,r1,c1,c0,0\n”);
4) 支持NOR FLASH(SST39VF1601)(include/configs/ smdk2410.h)
现在还无法通过U-BOOT的命令来操作NOR FLASH,在配置文件include/configs/ smdk2410.h里默认的型号是AM29LV400,而我们的是SST39VF1601。修改如下:
添加:
#define CONFIG_SST_39VF1601 1
#define CFG_MAX_FLASH_BANKS 1
#define PHYS_FLASH_SIZE 0x200000 /* 2MB */
#define CFG_MAX_FLASH_SECT (512) /* max number of sectors on one chip */
#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x30000) /* addr of environment */
接下来我们修改board/ smdk2410/flash.c:
将:#define MAIN_SECT_SIZE 0x10000 /* 64 KB */
修改为:#define MAIN_SECT_SIZE 0x1000 /* 4 KB */(按sector操作)
将:#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00000555 << 1)))
#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000002AA << 1)))
修改为:
#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000005555 << 1)))
#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000002AAA <<1)))
5) 内核参数的传递支持
只需要在include/configs/ smdk2410.h里增加两个宏,分别是:
#define CONFIG_SETUP_MEMORY_TAGS 1 //向内核传递内存分布信息
#define CONFIG_CMDLINE_TAG 1 //向内核传递命令行参数
6) 将tool/mkimage工具拷贝到主机linux系统的/bin目录下面。为以后做内核镜像使用。
7) 支持dm9000ep网卡驱动,只需在include/configs/smdk2410.h添加即可:
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x20000300
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
#define CONFIG_DM9000_USE_16BIT
交叉编译U-BOOT
#make distclean //彻底删除
#make smdk2410_config
#make ARCH=arm CROSS_COMPILE=arm-linux- (1.设置主机交叉编译器环境变量2.u-boot.bin在根目录)
生成的u-boot.bin即为我们移植后的结果。下载到开发板上运行!
2.3 Linux内核移植
2.3.1配置Linux内核
(1)修改内核目录树根下的的Makefile,指明交叉编译器:
$vim Makefile
找到ARCH和CROSS_COMPILE,修改
ARCH = arm
CROSS_COMPILE = arm-softfloat-linux-gnu-
保存退出,然后设置你的PATH环境变量,使其可以找到你的交叉编译工具链:
$echo $PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
如果路径为/home/linux/cossstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gun/bin,不用再进行设置,如果不是则进行下面步骤进行设置:
$exportPATH=$PATH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:(动态加载环境变量,终端关闭后,自己所加载的环境变量立即消失)。 或者修改./bashrc文件:(静态加载环境变量,不随终端的关闭而消失)
$ vim ~/.bashrc
在文件最后添加
PATH=$PATH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:
export PATH
(2)添加程序文件将 2410GPIO_TEST_drv.c 文件拷贝到内核代码目录 drivers/char 中 修改Makefile和Kconfig文件进入内核的 drivers/char 目录
$vim Makefile
找到在 obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o ,在其下一行添加:
obj-$(CONFIG_2410GPIO_TEST_DRV) += 2410GPIO_TEST_drv.o
保存退出vim
(3)修改Kconfig文件
$vim Kconfig
在以下代码段下面
menu "Character devices"
加入以下信息:
config 2410GPIO_TEST_DRV
tristate "S3C2410 test drv Device Support"
depends on ARCH_S3C2410
---help---
support led test device driver on FS2410 develop board
(4)编译内核产生zImage.img文件, 并将zImge.img拷贝到/tftpboot目录中,复位开发板,重新启动。编译命令:
#make zImage
#cd arch/arm/boot
# mkimage -n "linux-2.6.8.1 -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage zImage.img
#cp zImage.img /tftpboot
(5)交叉编译 2410GPIO_TEST_APP.c
/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-gcc 2410GPIO_TEST_APP.c –o gpio_test
(6)复制 gpio_test 到 /source/rootfs/sbin/gpio_test
(7)创建 GPIO_TEST 设备节点,在开发板上运行如下命令:
#mknod -m 666 /dev/GPIO_TEST c 252 0
(8)运行 gpio_test 测试,在开发板上运行如下命令:
#/sbin/gpio_test
(9)重新配置编译内核,将GPIO_TESt编译成模块,动态加载
2.3.2网卡驱动添加
(1)添加网卡驱动到内核
将cs8900a.h和cs8900a.c文件拷贝到内核代码目录drivers/net中:root@farsight:/source/kernel/linux-2.6.26.5# cp /mnt/hgfs/disk/cs8900a.* drivers/net
(2)修改Makefile和Kconfig文件
root@farsight:/source/kernel/linux-2.6.26.5# vim drivers/net/Makefile
在文件中添加:
obj-$(CONFIG_CS8900a) +=cs8900a.o
(3)保存退出,修改Kconfig文件
root@farsight:/source/kernel/linux-2.6.26.5# vim drivers/net/Kconfig
在以下代码段下面
config DM9000
tristate "DM9000 support"
depends on ARM && NET_ETHERNET
select CRC32
select MII
---help---
Support for DM9000 chipset.
To compile this driver as a module, choose M here and read
<file:Documentation/networking/net-modules.txt>.The module willbe
called dm9000.
加入以下信息:
config CS8900a
tristate "CS8900a support" #(注意开头使用TAB键,下同)
depends on ARM && NET_ETHERNET
---help---
Support for cs8900a chipset.
To compile this driver as a module, choose M here and read.
(4)配置内核支持CS8900A网卡
root@farsight:/source/kernel/linux-2.6.26.5# make menuconfig
Device Drivers ---> //配置网卡驱动:
Network device support --->
[*] Network device support
Ethernet (10 or 100Mbit) --->
[*] Ethernet (10 or 100Mbit)
<*> CS8900a support
保存退出,产生.config文件.
(5)编译内核产生zImage文件, 并将arch/arm/boot/zImge拷贝到/tftpboot目录中,在linux源码的顶层目录执行
#make zImage
#cd arch/arm/boot
# mkimage -n "linux-2.6.26.5" -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage zImage.img
#cp zImage.img /tftpboot
(6)拷贝rootfs-farsight.tar.gz到配置了tftp及nfs服务的ubantu7.04环境中
假定/source/rootfs为nfs的服务目录,则:
root@farsight:/source# cp rootfs-farsight.tar.gz /source
root@farsight:/source# tar zxvf rootfs-farsight.tar.gz
在目录/souce/rootfs下存放着一个可用的文件系统(文件系统的实验在后面的实验中会涉及到)。确保主机端tftp及nfs服务是开启的。
root@farsight:/source# cd rootfs
root@farsight:/source/rootfs# mknod dev/console c 5 1
(7)修改内核启动参数
FS2410# setenv bootcmd tftp 30008000 zImage.img\; bootm 30008000
FS2410# setenv bootargs root=nfs nfsroot=192.168.1.23:/source/rootfs ip=192.168
.1.134 console=ttySAC0,115200 init=/linuxrc
FS2410#saveenv
(8)启动开发平台,在超级终端观察现象
FS2410# boot
如果顺利,可以在串口终端显示linux命令行终端了!
第三章 系统硬件设计
第三章 系统硬件设计
寻物小车共有四部分电路组成,分别是:控制主板、电源电路、驱动电路、寻迹电路。
寻物小车整车电路接口框架图如图3-1所示:
循循迹板
COMS摄像头
S3C2440
核心板
8 路
循迹接口电 路
PWM光电隔离驱动接 口
驱动电路
测速电路
WIFI无线网卡
扩展功能接口板
左右
轮电机
图3-1整车电路板框架图
3.1 控制主板
控制主板由核心板和功能接口板组成。
核心板包含有32位的ARM微处理器及其ROM、RAM等存储器,完成程序运行、数据暂存等,是控制和指挥小车各个功能部件协调有序工作的指挥中心。
该板照片如图3-2所示。
图 3-2 MCU核心板
S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用0.18um制造工艺的32位微控制器。该处理器拥有:独立的16KB指令Cache和16KB数据Cache,MMU,支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。S3C2410处理器最高可运行在203MHz。
S3C2410X芯片集成了大量的功能单元,列举如下:
(1) 内核采用1.8 V供电,存储单元采用3.3 V独立供电,外部IO采用3.3 V独立供电,16 KB数据Cache,16 KB指令Cache,MMU。
(2) 内置外部存储器控制器(SDRAM控制和芯片选择逻辑)。
(3) LCD控制器(最高4K色STN和256K彩色TFT),一个LCD专用DMA。
(4) 4路带外部请求线的DMA。
(5) 3个通用异步串行端口,2通道SPI。
(6) 一个多主IIC总线,一个IIS总线控制器。
(7) SD主接口版本1.0和多媒体卡协议版本2.11兼容。
(8) 2个USB Host接口,一个USB Device(VER1.1)接口。
(9) 4个PWM定时器和一个内部定时器。
(10) 看门狗定时器。
(11) 117个通用I/O。
(12) 24个外部中断。
(13) 电源控制模式:标准、慢速、休眠、掉电。
(14) 8通道10位ADC和触摸屏接口。
(15) 带日历功能的实时时钟。
(16) 芯片内置PLL。
(17) 16/32位RISC体系结构,使用ARM920T CPU核的强大指令集。
(18) ARM带MMU的先进体系结构,支持Windows CE、EPOC32、Linux。
(19) 指令缓存(Cache)、数据缓存、写缓冲和物理地址 TAG RAM,减小了对主存储器带宽和性能的影响。
(20) ARM920T CPU核支持ARM调试体系结构。
(21) 内部先进的位控制器总线(AMBA2.0、AHB/APB)。
系统管理方面的特点如下:
(1) 小端/大端支持。
(2) 地址空间:每个BANK为128 MB(全部为1 GB)。
(3) 每个BANK可编程为8/16/32位数据总线。
(4) BANK 0~BANK 6为固定起始地址。
(5) BANK 7可编程BANK的起始地址和大小。
(6) 共有8个存储器BANK。
(7) 6个存储器BANK用于ROM、SRAM及其他。
(8) 2个存储器BANK用于ROM、SRAM及同步DRAM。
(9) 每个存储器BANK可
展开阅读全文