10.1 S3C2440 内部资源

  • 1.2V 内核供电, 1.8V/2.5V/3.3V 储存器供电, 3.3V 外部 I/O 供电,具备 16KB 的指令缓存和 16KB 的数据缓存和 MMU
  • 的微处理器
  • 外部存储控制器(SDRAM 控制和片选逻辑)
  • LCD 控制器(最大支持 4K 色 STN 和 256K 色 TFT)提供 1 通道 LCD 专用 DMA
  • 4 通道 DMA 并有外部请求引脚
  • 3 通道 UART(IrDA1.0, 64 字节发送 FIFO 和 64 字节接收 FIFO)
  • 2 通道 SPI
  • 1 通道 IIC 总线接口(支持多主机)
  • 1 通道 IIS 总线音频编码器接口
  • AC’97 编解码器接口
  • 兼容 SD 主接口协议 1.0 版和 MMC 卡协议 2.11 兼容版
  • 2 通道 USB 主机/1 通道 USB 设备(1.1 版)
  • 4 通道 PWM 定时器和 1 通道内部定时器/看门狗定时器
  • 8 通道 10 位 ADC 和触摸屏接口
  • 具有日历功能的 RTC
  • 摄像头接口(最大支持 4096×4096 像素输入;2048×2048 像素输入支持缩放)
  • 130 个通用 I/O 口和 24 通道外部中断源
  • 具有普通,慢速,空闲和掉电模式
  • 具有 PLL 片上时钟发生器

10.2 JZ2440 烧写程序

10.2.1 系统安装

  • 镜像在 PC 上

    • usb 加载启动程序 ---> 加载 uboot(tftp 下载程序(网络)/ fastboot 下载程序(网络))--->nand
  • 镜像在 SD 卡上
    • SD 卡启动 uboot(镜像在 SD 卡中)--->nand
    • 镜像都存于 SD 卡中
  • 存储器烧写器/编程器

10.2.2 S3C2440 两种启动方式

  • nand 启动:S3C2440 片内 Stepping Stone Controller,启动时,通过外部针脚的电平高低的硬件配置来获得页大小,数据宽度,地址周期等要素,从而可以在启动时能够完成读取 Nandflash 前 4 K代码到 SRAM
  • nor 启动:Nor 中存放的代码可以直接运行,需要事先烧录程序到 NorFlash 中

10.2.3 安装 openjtag 驱动

使用 OpenJTAG 接好线时, 图示如下:

  

插上后,会识别处端口,然后安装 100ask 的驱动,但是 WIN10 会强制驱动签名,需要关闭 WIN10 系统的强制驱动签名。具体关闭方法,自行百度。

10.2.3 安装 oflash

  • 安装 OpenOCD with GUI setup.exe
  • 在命令行中输入: oflash 即可进入 oflash

10.2.4  刷写

  • 在命令行下,输入 oflash 命令即可进入刷写

10.2.5 ubuntu 环境配置

  • 最基本 VIM 等配置
  • 交叉编译工具链配置,可以用 JZ2440 配套的工具链,也可以用 crosstool-ng 自己生成一套交叉编译工具链,裸机就采用提供的工具链
  • 在 ubuntu 的自己的建立的工作目录下,解压 tar -jxvf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2
  • 写一个简单的复用的 Makefile 去调用此工具链编译
 # 获取当前工作目录
CURRDIR = $(shell pwd) # 头文件所在目录
INCDIR = $(CURRDIR) # 交叉编译工具链的绝对路径
CROSS_COMPILE = /home/arm/arm_work/s3c2440/tools/gcc-3.4.-glibc-2.3./bin/arm-linux- # 编译器工具
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump # 编译器标识位设置
CFLAGS =
AFLAGS =
LDFLAGS =
CFLAGS =
AFLAGSL = # 目标文件设置
objs := startup.o # 执行编译的过程
int.bin: $(objs)
$(LD) -Ttext 0x00000000 -o int_elf $^
$(OBJCOPY) -O binary -S int_elf $@
$(OBJDUMP) -D -m arm int_elf > int.dis %.o:%.c
$(CC) -Wall -O2 -c -o $@ $< %.o:%.S
$(CC) -Wall -O2 -c -o $@ $< clean:
rm -f int.bin int_elf int.dis *.o
  • 测试一下代码
 .text
.global _start _start:
LDR R0,=0x56000050
MOV R1,#0x00000100
STR R1,[R0]
LDR R0,=0x56000054
MOV R1,#0x00000000
STR R1,[R0] MAIN_LOOP:
B MAIN_LOOP

  在工作目录下执行 make 命令:

  

10.2.6 烧写

  • cmd 窗口进入待下载 bin 文件的目录,若是文件在虚拟机上,通过 samba 或是 ssh 将文件拷贝出来
  • 使用 oflash init.bin 命令

  

  • 选择下载模式 OpenJTAG

  

  • 选择 CPU:S3C2440

  

  • 选择nandFlash(裸机) 或者 norFlash,根据当前拨码开关连接的哪个设备决定

  

  • 选择要烧写的起始地址(裸机都是0)

  

10.2.7 OpenOCD 调试

  • 打开 OpenOCD GUI for OpenJTAG

  

  • Manual 中的选择:

    • Interface:openjtag
    • Target:samsung_s3c2440
  • OpenOCD:
    • Work Dir:选择自己要调试的 bin 文件所在的目录
  • 点击 Connect 进行连接

  

  • 点击 telnet 进入命令行(注意要将操作系统的 telnet 客户端服务给打开,不然点了没反应)

  

  • 执行命令:

    • halt:挂起命令,也可以中断目标板的运行
    • step [address]:单步执行,如果指定了 address,则从 address 处开始执行
    • reset:复位目标板
    • mdw ['phys'] <addr> [count] 显示从(物理)地址 addr 开始的 count(缺省是 1)个字(4 字节),如 mdw 0x00000004 4
    • mdh ['phys'] <addr> [count] 显示从(物理)地址addr 开始的count(缺省是1)个半字(2字节)
    • mdb ['phys'] <addr> [count] 显示从(物理)地址 addr 开始的 count(缺省是 1)个字节
    • mww ['phys'] <addr> <value> 向(物理)地址 addr 写入一个字,值为 value
    • mwh ['phys'] <addr> <value> 向(物理)地址 addr 写入一个半字,值为 value
    • mwb 'phys'] <addr> <value> 向(物理)地址 addr 写入一个字节,值为 value
    • poll:查询目标板当前状态
    • resume [address]:恢复目标板的运行,如果指定了 address,则从 address 处开始执行
    • bp <addr> <length> [hw] 在地址 addr 处设置断点,指令长度为 length, hw 表示硬件断点
    • rbp <addr> 删除地址 addr 处的断点内存访问指令(Memory access commands)
    • load_image <file> <address> [‘bin’|‘ihex’|‘elf’]
      • 将文件<file>载入地址为 address 的内存,格式有‘bin’、‘ihex’、‘elf’
    • dump_image <file> <address> <size>
      • 将内存从地址 address 开始的 size 字节数据读出,保存到文件<file>中
    • verify_image <file> <address> [‘bin’|‘ihex’|‘elf’]
      • 将文件<file>与内存 address 开始的数据进行比较,格式有‘bin’、‘ihex’、‘elf’
    • reg 打印寄存器的值
    • arm7_9 fast_memory_access ['enable'|'disable']:使能或禁止“快速的内存访问”
    • arm mcr cpnum op1 CRn op2 CRm value 修改协处理器的寄存器
    • arm mrc cpnum op1 CRn op2 CRm 读出协处理器的寄存器
    • arm920t cp15 regnum [value] 修改或读取 cp15 协处理器的寄存器
    • virt2phys virtual_address 获得虚拟地址对应的物理地址

10.3 ARM 程序启动过程

  

  • S3C2440 内部没有 iROM。有两种启动方式:nandflash 启动,norflash 启动
  • 以后设计的 SOC 内部都有 iROM,用来初始化 SOC 内部资源,然后在启动介质中的程序
  • 内部 iROM 可以启动固化程序,判断启动方式:USB,NANDFLASH,SD card 等

10.4 存储器比较

10.4.1 内存

  • SDRAM:静态内存,特点就是容量小、价格高,优点是不需要软件初始化直接上电就能用
  • DRAM:动态内存,特点就是容量大、价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使用
  • 单片机中,内存需求量小,而且希望开发尽量简单,适合全部用 SRAM
  • 嵌入式系统和 PC 机:程序和数据都是在内存中运行的,内存需求量大,使用的是 DRAM

10.4.2 外存

  • NorFlash:特点就是容量小,价格高,优点是可以和 CPU 直接总线式相连,CPU 上电后可以直接读取
  • NandFlash:与硬盘一样,特点是容量大、价格低,缺点是不能总线式访问,需要初始化,然后通过时序接口读写
  • 单片机中:程序简单固定,适合使用 NorFlash,直接存储程序运行,一般是集成到单片机中
  • 嵌入式系统和 PC 机:程序多样化,程序的存储态是存入在 NandFlash 中,运行于内存中

十、S3C2440 开发资源的更多相关文章

  1. Android进阶(二十)AndroidAPP开发问题汇总(四)

    · Android进阶(二十)AndroidAPP开发问题汇总(四) android:layout_width和android:width的区别 基中的android:layout_width和and ...

  2. ETH&EOS开发资源及工具集合(完整汇总版)

    ETH&EOS开发资源及工具集合(完整汇总版) 3113 ETH开发资源篇 一.开发语言 ·         Solidity - 官方推荐以太坊智能合约开发语言,也是目前最为主流的智能合约语 ...

  3. Kinect开发资源汇总

    Kinect开发资源汇总   转自: http://www.sigvc.org/bbs/forum.php?mod=viewthread&tid=254&highlight=kinec ...

  4. 年底发福利了——分享一下我的.NET软件开发资源

    最近建了一个.NET软件开发资源的360网盘共享群,把收集的一些.NET软件开发资源分享给大家,也欢迎大家把好的东东分享一下. 资源主要有:开发工具.控件资源.书籍教程.网页设计.源码资源几大类,也希 ...

  5. fir.im Weekly - 94 个 iOS 开发资源推荐

    距离 2016 年还有 17 个日夜,而你和回家只隔了一张 12306 验证码的距离,祝大家抢票顺利.本期 fir.im Weekly 收集了一些优秀的 GitHub 源码.开发工具和动画特效,希望对 ...

  6. Android SDK和N多Android开发资源

    开发资源 本文收集整理Android开发需要的Android SDK.工具.Android开发教程.Android设计规范,免费的设计素材等. 欢迎大家推荐自己在Android开发过程中用的好用的工具 ...

  7. Windows 8.1 Preview 开发资源汇总

    Microsoft Build 2013开发者大会已经结束,从Session安排上看主要以Windows 8.1为主.我相信大家有已经或多或少的体验过Windows 8.1 Preview了,关于操作 ...

  8. HTML5+CSS3前端开发资源整合

    HTML5+CSS3前端开发资源整合   推个广告 个人网站:http://www.51pansou.com HTML5视频下载:HTML5视频 HTML5源码下载:HTML5源码 meta相关: & ...

  9. Mac和iOS开发资源汇总

    小引 本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D). 今天(2013年7月19日)收录了许多中文网站和博客.大家一定要去感受一下哦. 如果大 ...

随机推荐

  1. nodejs 简单的搭建一个服务器

    前言: nodejs 主要是后台语言  node 是在终端运行的,所以他可以进行 dos 命令 模块 自定义 JavaScript 是前台语言 nodejs 是 也是使用我们的 JavaScript ...

  2. leetcode-easy-array-283 move zeros

    mycode  77.24% class Solution(object): def moveZeroes(self, nums): """ :type nums: Li ...

  3. 让hibernate支持mysql的text或者longtext

    public class CustomDialect extends MySQL5Dialect { public CustomDialect() { super(); registerHiberna ...

  4. hihoCoder#1879 : Rikka with Triangles (计算几何)

    n<=2000,肯定没有办法把所有三角形找出来全判一遍 对于三角形的三个角,分别计算贡献,锐角的贡献是1倍面积,钝角的贡献是-2倍面积,这样算出角的贡献之后除以3就可以了 每次选择一个点为中心点 ...

  5. mac 外接显示屏的坑

    概述 工作中使用 Mac 外接显示屏,有时会出现闪屏然后黑屏的现象,之前都没有找到原因,今天终于找到了,记录下来,供以后参考,相信对其他人也有用. 参考资料: Macbook外接显示器设置教程 问题 ...

  6. 配置Log4j(很详细)【转】

    来自: http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记 ...

  7. 用U盘完成win10系统的安装

    电脑太卡了,每次都要重装,然后每次忘记要从哪里开始动手,都要百度,仅以此篇记录下 目录 1.系统盘准备 2.从U盘启动安装 1.系统盘准备 第一步:在电脑中完成系统盘制作工具的安装,由于它是要依赖.n ...

  8. Text Elements(文本元素)对象

    1.T-Code:SE32 操作路径:主菜单——转到——内文元素——选择内文 2. 清单标题(List heading) 用于定义Report标题名称及描述,如图: 2. 選擇內文 (Selectio ...

  9. zabbix添加主机后无法显示解决

    第一次添加主机后显示正常,后来删除了主机,重新添加了一下主机再也无法显示主机,很苦恼,原来需要点击重设,

  10. vue组件事件(极客时间Vue视频笔记)

    vue组件核心:事件 <body> <div class="app"> <todo-list></todo-list> {{mess ...