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. jQuery easyui datagrid 的数据加载

        其实easyuidatagrid加载数据只有两种方式:一种是ajax加载目标url返回的json数据:另一种是加载js对象,也就是使用loadDate方法,这种方法用于加载本地js数据(非ur ...

  2. linux下插入U盘自动挂载后,用C获取其挂载点(cat /proc/mounts)

    现在已经能够通过libudev获取U盘插入时它的节点名(通过函数udev_device_get_devnode()),是/dev/sdb1 我现在的做法是读取/proc/mounts文件,找到有/de ...

  3. layui table指定某一行样式

    1.想指定layui table中某一行的样式,找了这个资源可行.转自: https://blog.csdn.net/weixin_44729896/article/details/100524824 ...

  4. tensorflow学习——调试ctc的两个bug

    InvalidArgumentError (see above for traceback): Not enough time for target transition sequence (requ ...

  5. Spring框架中的依赖注入

    依赖注入(DI : Dependency Injection)是基于.xml配置文件内节点的书写. 注入类型: 1.设置注入,调用了Bean的setXXX()进行值注入 普通属性(value值表示要显 ...

  6. Apache监控调优

    apache是一款对静态资源处理得比较好的中间件,但是对动态请求处理得不是很好,tomcat则正好相反. apache运用得比较多得工作模式主要是Prefork和Worker两种模式 1.Prefor ...

  7. Android:adb命令详解

    什么是adb adb工具即Android Debug Bridge(安卓调试桥) tools.它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互

  8. c#字符串代码,动态创建编译器

    https://www.cnblogs.com/mrma/p/3998679.html 试了,确实可行,在unity也能用 值得注意的是UnityScript.Scripting.Evaluator ...

  9. python控制流-名词解释

    一.控制流的元素 控制流语句的开始部分通常是“条件”,接下来是一个代码块,称为“子句”. 二.控制流的条件 条件为了判断下一步如何进行,从而求布尔值的表达式.几乎所有的控制流语句都使用条件. 三.代码 ...

  10. [19/06/05-星期三] CSS基础_样式表的位置(内联、内部、外部样式)、块元素(div)、内联元素(span)、常用的选择器

    一.概念 CSS(Cascading Style Sheets,层叠样式表) 可以用来为网页创建样式表,通过样式表可以对网页进行装饰. 所谓层叠,就是可以将整个网页想象成是一层一层的结构,层次高的将会 ...