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. virt-manager 使用 shh 远程访问配置方法

    1.下载安装 Xming+Xshell  或者 Xming+putty,启动Xming服务 Xming下载地址 2.XMing的配置:打开XLaunch,记住Display Number,现在这里是0 ...

  2. 使用type在对象方法中调用类方法

    type简介 type在Python中的作用是创建一个类. 我们创建类的时候一般会使用这样的方法: # -*- coding:utf-8 -*- class Student(object): coun ...

  3. 三、robotframework封装的关键字-数据库使用

    1.      从数据库查询结果:   数据库连接:Connect To Database Using Custom Params           用法:Connect To Database U ...

  4. C# App.config 自定义 配置节

    1)App.config <?xml version="1.0" encoding="utf-8" ?><configuration>  ...

  5. vue入门demo:用户管理3

    该入门demo是使用组件的方式实现,不涉及向后端发送请求 说明 把用户列表和添加用户拆分为两个组件,用户列表数据在父组件 获取用户列表:用户列表组件获取父组件的用户列表(父组件向子组件传值)1-1 1 ...

  6. Flink集群环境搭建

    环境准备 master:171:slave:171,172:flink版本:1.3.0 下载地址:http://archive.apache.org/dist/flink/flink-1.3.0/ 集 ...

  7. Scala的to和until

    object test03 { def main(args: Array[String]): Unit = { //to 每次迭代为1 val to1= to print("to1" ...

  8. 【MM系列】SAP MM模块-科目分配的配置

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-科目分配的配置   ...

  9. 初学node.js-nodejs中实现修改用户路由

    经过前面几次的学习,已经可以做下小功能,今天要实现的是修改用户路由. 一.users_model.js  功能:定义用户对象模型 var mongoose=require('mongoose'), S ...

  10. Mysql 5.7存储过程的学习

    存储过程:对sql的封装和重用,经编译创建并保存在数据库中,通过指定存储过程的名字并给定参数(需要时)来调用执行. 优缺点: (1) 优点: 执行速度快------存储过程只在创建时进行编译,以后每次 ...