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. 一、Jmeter启动报错:Could not initialize class org.apache.jmeter.gui.util.MenuFactory

    1.下载: plugins-manager.jar 包 2.地址:https://jmeter-plugins.org/install/Install/ 3.将jar包放到lib/ext 4.重启jm ...

  2. 3、maven导入外部自定义jar包

    有些时候我们自己有一些jar包需要导入到我们的仓库中,然后在maven项目里的pom.xml文件加入这些jar包的依赖即可使用这些jar包了 1.确保行执行mvn -v没有问题 2.把需要引入的jar ...

  3. java hashset输出

    for (Map.Entry<String, String> me : id_label_map.entrySet()) { System.out.println(me.getKey() ...

  4. Unsupervised Image-to-Image Translation Networks

    Abstract: 无监督图像到图像的翻译目的是学习不同域图像的一个联合分布,通过使用来自单独域图像的边缘分布.给定一个边缘分布,可以得到很多种联合分布.如果不加入额外的假设条件的话,从边缘分布无法推 ...

  5. 中国MOOC_零基础学Java语言_第4周 循环控制_2念整数

    2 念整数(5分) 题目内容: 你的程序要读入一个整数,范围是[-100000,100000].然后,用汉语拼音将这个整数的每一位输出出来. 如输入1234,则输出: yi er san si 注意, ...

  6. Linux mysql ERROR 1045 解决

    Linux mysql 5.6: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) ...

  7. Babel编译:类

    编译前 class Fruit{ static nutrition = "vitamin" static plant(){ console.log('种果树'); } name; ...

  8. python3 基本数据类型_1

    不得已,要学习python3了,之前了解到py2与py3有很大不同,不过学起来才能感觉到,比如print. 不过,同样的代码,可以使用py3,py2执行,结果也相似,大家可以看看. 大概因为初学,还未 ...

  9. keras recall

    # accuracy, fmeasure, precision,recall def mcor(y_true, y_pred): y_pred_pos = K.round(K.clip(y_pred, ...

  10. 【Windows Server存储】windows文件系统

    windows文件系统 弹性文件系统(ReFS) 无检查磁盘,Windows 8或Windows Server 2012以上运行. 参考资料表明,这是一个失败的文件系统,以后将不会商用. 参考资料:h ...