精华内容
下载资源
问答
  • Tiny4412核心板介绍02. Tiny4412核心板硬件资源特性03. Tiny4412底板资源分布图04. Android 4.2.2软件系统特性05. Linux+Qt软件系统特性06. 附录 01. Tiny4412核心板介绍 Tiny4412 是高性能的 Cortex-A9 核心板,...

    00. 目录

    01. Tiny4412核心板介绍

    在这里插入图片描述

    Tiny4412 是高性能的 Cortex-A9 核心板,它们由广州友善之臂设计、生产和发行销售。采用三星高性能的 Exynos 4412 四核处理器。

    Tiny4412是一款高性能的四核Cortex-A9核心板,由广州友善之臂设计、生产和发行销售。它采用三星Exynos4412作为主处理器,运行主频可高达1.5GHz,Exynos4412内部集成了Mali-400 MP高性能图形引擎,支持3D图形流畅运行,并可播放1080P大尺寸高清视频。三星旗舰智能手机Galaxy S3即是采用此CPU设计。

    Tiny4412核心板采用了2.0mm间距的双排针(P1, P2, P3, P4),尺寸为74x55mm,总共引出208Pin引脚。其中P1和P2排针为标配焊接,它们已经包含了大部分常用的功能;P3和P4空焊,方便用户扩展开发使用。Tiny4412实现了主控芯片难度最高的核心部分,因此非常适合企业用户进行快速产品设计或项目开发,核心板标配1GB DDR2内存和4GB高性能eMMC闪存(另可选配8/16/32GB等容量)。

    Tiny4412SDK是相应的参考设计底板,它带有各种常见的标准接口,比如HDMI输出,USB Host, SD卡,DB9串口,RJ-45以太网口,音频输入输出口等,还有一些在板资源测试器件如EEPROM,蜂鸣器,按键,GPIO口,SDIO口等等,以便用户全面的评估和使用核心板。因为Exynos4412定位主要是面向高端手持移动设备,为了做到低功耗,大部分IO口采用的是1.8V电压,这就导致无法适用于一些常见的传统IO模块,因此我们在底板上对几乎所有IO都做了电平转换(转为3.3V),以便于老用户依然能够兼容使用,这可以大大节省产品项目开发的时间。

    我们还充分地发挥了4412支持SD卡启动这一特性,精心研制了功能强大的Superboot-4412,无需连接电脑,只要把系统ROM拷贝到SD卡中(可支持高达32G的高速大容量卡),你就可以极速简单地自动安装各种嵌入式系统(Linux/Android/Ubuntu等);这非常适合企业用户批量生产和现场升级更新系统之用!

    紧跟时代发展的步伐,我们还采用跨平台的Qt4开发了全新的USB下载工具MiniTools,配合Superboot,用户可以像刷手机一样刷板,它采用了世界通用的Fastboot底层驱动,因此可以通吃几乎所有Windows系统(含32/bit-bit机器),并且可以支持各种发行版Linux,如Fedora、Ubuntu等系统。 使用MiniTools,无需串口连接,只要USB,用户可以选择单个或多个系统映像文件,下载和烧写一气呵成,真正实现一键烧写;另外,MiniTools还支持下载到内存运行,以及一键快速启动功能,因此,MiniTools也非常适合开发者快速调试开发之用!

    02. Tiny4412核心板硬件资源特性

    在这里插入图片描述

    03. Tiny4412底板资源分布图

    在这里插入图片描述

    04. Android 4.2.2软件系统特性

    参考用户手册

    05. Linux+Qt软件系统特性

    参考用户手册

    06. 附录

    6.1 参考网站

    参考:http://www.arm9.net/tiny4412.asp

    展开全文
  • 适用开发板型号:Tiny4412/Super4412SDK 1506 ,注意,是1506!1506!1506! 内部已经生成了uboot.bin文件,可直接使用!
  • 从今天开始就正式进入到tiny4412的开发学习中了,今天主要看了一下Tiny4412的启动流程及存储器映射及Exynos4412数据手册,用汇编写了一个跑马灯程序(后续会有C语言版本的出来),先说一下我的开发环境吧: ...

    从今天开始就正式进入到tiny4412的开发学习中了,今天主要看了一下Tiny4412的启动流程及存储器映射及Exynos4412数据手册,用汇编写了一个跑马灯程序(后续会有C语言版本的出来),先说一下我的开发环境吧:

    开发板:Tiny4412 增强版 (底板是Tiny4412ADK 1312)

    开发工具:UltraEdit

    宿主机:VmWare Ubuntu12.04(64bit)

    编译工具:arm-linux-gcc4.5.1

    为了便于分类管理,特意开了一个Tiny4412学习专区,希望对大家有所帮助,下面进入正题,说一下跑马灯程序。

    一、控制原理说明

    tiny4412核心板

    先看一下原理图:


    tiny4412-led原理图


    tiny4412-led原理图

    如上图可知,Tiny4412有4个用户LED灯,控制它们四个引脚分别是GPM4_0~ GPM4_3,由原理可知,当IO引脚为高电平时,LED灯灭,当IO引脚为低电平时LED亮。我们要做的工作就是设置GPM4_0~ GPM4_3为输出功能,且控制且输出电平高低即可。

    二、程序说明

    1.led.S

    由原理图可知,程序只进行了两步操作;

    第一步:设置GPM4_0~GPM4_3相对应的控制寄存器GPM4CON,使GPM4_0~ GPM4_3四个引脚为输出功能。

    Tiny4412-GPM4CON

    第二步:设置其对应的数据寄存器GPM4DAT对应的4个bit位为0,使GPM4_0~ GPM4_3为低电平,4个LED灯全亮,等待一段时间将第0位设置为0,其余位设置为1,这样只有第一个灯亮;等待一段时间将第1位设置为0,其余位设置为1,这样只有第二个灯亮;等待一段时间将第2位设置为0,其余位设置为1,这样只有第三个灯亮;等待一段时间将第3位设置为0,其余位设置为1,这样只有第四个灯亮;等待一段时间使GPM4_0~ GPM4_3全为高电平,4个LED灯全灭。这样就实现了跑马灯效果。

    程序代码中,也有相关解释这里不做过多说明。

    .text
    .globl _start
    _start:
     
    /*
    * set GPM4 as output
    */
    ldr r0, =0x110002E0 // GPM4CON的地址是0x110002E0
    ldr r1, [r0] // 先读出原值
    bic r1, r1, #0xff00 // 清除bit[15:8]
    bic r1, r1, #0xff // 清除bit[7:0]
    orr r1, r1, #0x1100 // 设置bit[15:8]为0b00010001
    orr r1, r1, #0x11 // 设置bit[7:0]为0b00010001
    str r1, [r0] // 写入GPM4CON
    /*
    * set GPM4DAT as Low For leds
    */
    ldr r0, =0x110002E4 // GPM4DAT的地址是0x110002E0
    ldr r1, [r0] // 读出原值
     
    leds_loop:
     
    bic r1, r1, #0xf // 清除bit[0-3]为0 全亮
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    orr r1, r1, #0xe // 设置bit[0]为0 LED1亮
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    bic r1, r1, #0x3 // 设置bit[1]为0 LED2亮
    orr r1, r1, #1
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    bic r1, r1, #0x6 // 设置bit[2]为0 LED3亮
    orr r1, r1, #2
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    bic r1, r1, #0xc // 设置bit[3]为0 LED4亮
    orr r1, r1, #4
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    orr r1, r1, #0xf
    str r1, [r0] // 写入GPM4DAT 全灭
    ldr r2,=0xffffff
    bl delay
     
    b leds_loop
    halt_loop:
    b halt_loop
     
    delay:
    //跑马灯延时程序
    sub r2,r2,#1 //sub 减法
    cmp r2,#0x0 //将r0 与0比较
    bne delay //b是跳 ne 是不相等 ,不相等就跳到delay
    mov pc,lr //lr 里存的是调用函数时的下一条指令,让Pc指针指向lr就可以完成函数的返回

    2. MakeFile说明

    led.bin : led.S
    arm-linux-gcc -c -o led.o led.S
    arm-linux-ld -Tled.lds -N led.o -o led.elf
    arm-linux-objcopy -O binary -S led.elf led.bin
    arm-linux-objdump -D -m arm led.elf > led.dis
    clean:
    rm -f *.dis *.bin *.elf *.o

     

    当我们在Makefile所在目录下执行make命令时,系统会进行如下操作:

    第一步 执行arm-linux-gcc -c -o led.o led.S命令将当前目录下存在的汇编文件led.S编译成led.o文件;

    第二步 执行arm-linux-ld -Tled.lds -N led.o -o led.elf将.o文件链接成elf文件,-Tled.lds 其中led.lds位链接脚本,告诉连接器如何对程序进行链接,以及链接地址等等(下面会有讲解);

    第三步 执行arm-linux-objcopy -O binary -S led.elf led.bin将elf文件抽取为可在开发板上运行的bin文件;

    第四步 执行arm-linux-objdump -D -m arm led.elf > led.dis将elf文件反汇编,便于我们对程序的分析,查找错误等等;

    【led.s--led.o--led.elf--led.bin】

    3. 链接脚本led.lds说明

    SECTIONS {
    . = 0x02023400;
    .text : { *(.text) }
    .rodata ALIGN(4) : {*(.rodata*)}
    .data ALIGN(4) : { *(.data*) }
    .bss ALIGN(4) : { *(.bss) *(COMMON) }
    }

     

    本文不对链接脚本的具体语法进行介绍,读者可以自已自行google了解

    第2行表示程序的连接地址从0x02023400开始,这表示我们的程序运行之前应该位于内存地址0x02023400字节处,

    BL1会把 BL2复制到0x02023400地址处,再启动它。

    第 3~6行,表示从 0x02023400 开始,依次排放程序的代码段、 只读数据段、数据段、BSS段。

    三、程序编译及烧写

    1.编译

    通过FTP或者其他工具将led.s、Makefile、led.lds 三个文件上传到服务器上去,输入make命令进行编译将得到led.bin文件。

    2.烧写

    将SD卡插入电脑,并让VmWare里的Ubuntu识别出来,然后执行如下命令:

    sudo ./sd_fusing.sh /dev/sdb ../01.led/led.bin

     

    Tiny4412-Prog

    如图所示,SD卡烧写成功,将SD卡插到Tiny4412开发板上,并设置为SD卡启动,这时你就会看到LED灯在闪烁。

    说明:sd_fusing.sh是一个shell脚本,这个脚本文件,一键烧写程序到 SD 卡中。我们分析该脚本程序,发现其核心命令就3条

    dd iflag=dsync oflag=dsync if=/work/4412/tools/E4412_N.bl1.bin of=$1 seek=$signed_bl1_position
     
    dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position
     
    sync

     

    第 1行的命令用于将E4412_N.bl1.bin烧写到 SD卡的第 1个扇区 (扇区从 0编号 );

    第 2行的命令用于将bl2.bin烧写到SD卡的第17个扇区;

    第 3行的命令用于将内存缓冲区数据写入磁盘.

    E4412_N.bl1.bin(BL1) 是由三星原厂提供, 没有源码;

    bl2.bin 是通过 mkbl2 工具处理源文件得到,具体实现如下:

    ./mkbl2 leds_on.bin bl2.bin 14336

    mkbl2 是用来生成 bl2.bin 的工具,通过编译 V310-EVT1-mkbl2.c 文件得到,具体如下:

    gcc -o mkbl2 V310-EVT1-mkbl2.c

     

    通过分析 V310-EVT1-mkbl2.c源码,我们可以知道它主要做了这些工作:

    1). 从源文件中读取14K 的数据到 Buf 当中;

    2). 处理 Buf 中前14332 字节的数据,得到 4字节的checksum ;

    3). 组装 Buf 中前 14332 字节的数据和 4字节的 checksum,得到一个新的 14K 的 Buf 数据;

    4). 将 3) 中构建的Buf 数据写到bl2.bin文件中

    四、上电实验

    如下图所示,可以看到4个led轮流着点亮及熄灭


    tiny4412流水灯效果

     

    完整的程序下载地址(解压密码:WWW.techbulo.Com):

     

    原文:

    http://www.techbulo.com/1313.html

     

    ---

    转载于:https://www.cnblogs.com/Ph-one/p/4547017.html

    展开全文
  • Tiny4412汇编流水灯代码,Tiny4412裸机LED操作 2014年10月20日⁄裸机程序⁄ 共 4171字 ⁄ 字号小中大⁄评论 15 条⁄ 阅读 4,701 次 从今天开始就正式进入到tiny4412的开发学习中了,今天主要看了一下Tiny4412...

    本转载自:http://www.techbulo.com/1313.html

    Tiny4412汇编流水灯代码,Tiny4412裸机LED操作

    2014年10月20日 ⁄ 裸机程序 ⁄ 共 4171字 ⁄ 字号    ⁄ 评论 15 条 ⁄ 阅读 4,701 次

    从今天开始就正式进入到tiny4412的开发学习中了,今天主要看了一下Tiny4412的启动流程及存储器映射及Exynos4412数据手册,用汇编写了一个跑马灯程序(后续会有C语言版本的出来),先说一下我的开发环境吧:

    开发板:Tiny4412 增强版 (底板是Tiny4412ADK 1312)

    开发工具:UltraEdit

    宿主机:VmWare Ubuntu12.04(64bit)

    编译工具:arm-linux-gcc4.5.1

    为了便于分类管理,特意开了一个Tiny4412学习专区,希望对大家有所帮助,下面进入正题,说一下跑马灯程序。

    一、控制原理说明

    tiny4412核心板

    tiny4412核心板

    先看一下原理图:

    tiny4412-led原理图

    tiny4412-led原理图

    tiny4412-led原理图

    tiny4412-led原理图

    如上图可知,Tiny4412有4个用户LED灯,控制它们四个引脚分别是GPM4_0~ GPM4_3,由原理可知,当IO引脚为高电平时,LED灯灭,当IO引脚为低电平时LED亮。我们要做的工作就是设置GPM4_0~ GPM4_3为输出功能,且控制且输出电平高低即可。

    二、程序说明

    1.led.S

    由原理图可知,程序只进行了两步操作;

    第一步:设置GPM4_0~GPM4_3相对应的控制寄存器GPM4CON,使GPM4_0~ GPM4_3四个引脚为输出功能。

    Tiny4412-GPM4CON

    Tiny4412-GPM4CON

    第二步:设置其对应的数据寄存器GPM4DAT对应的4个bit位为0,使GPM4_0~ GPM4_3为低电平,4个LED灯全亮,等待一段时间将第0位设置为0,其余位设置为1,这样只有第一个灯亮;等待一段时间将第1位设置为0,其余位设置为1,这样只有第二个灯亮;等待一段时间将第2位设置为0,其余位设置为1,这样只有第三个灯亮;等待一段时间将第3位设置为0,其余位设置为1,这样只有第四个灯亮;等待一段时间使GPM4_0~ GPM4_3全为高电平,4个LED灯全灭。这样就实现了跑马灯效果。

    程序代码中,也有相关解释这里不做过多说明。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    .text
    .globl _start
    _start:
     
    /*
    * set GPM4 as output
    */
    ldr r0, =0x110002E0 // GPM4CON的地址是0x110002E0
    ldr r1, [r0] // 先读出原值
    bic r1, r1, #0xff00 // 清除bit[15:8]
    bic r1, r1, #0xff // 清除bit[7:0]
    orr r1, r1, #0x1100 // 设置bit[15:8]为0b00010001
    orr r1, r1, #0x11 // 设置bit[7:0]为0b00010001
    str r1, [r0] // 写入GPM4CON
    /*
    * set GPM4DAT as Low For leds
    */
    ldr r0, =0x110002E4 // GPM4DAT的地址是0x110002E0
    ldr r1, [r0] // 读出原值
     
    leds_loop:
     
    bic r1, r1, #0xf // 清除bit[0-3]为0 全亮
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    orr r1, r1, #0xe // 设置bit[0]为0 LED1亮
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    bic r1, r1, #0x3 // 设置bit[1]为0 LED2亮
    orr r1, r1, #1
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    bic r1, r1, #0x6 // 设置bit[2]为0 LED3亮
    orr r1, r1, #2
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    bic r1, r1, #0xc // 设置bit[3]为0 LED4亮
    orr r1, r1, #4
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    orr r1, r1, #0xf
    str r1, [r0] // 写入GPM4DAT 全灭
    ldr r2,=0xffffff
    bl delay
     
    b leds_loop
    halt_loop:
    b halt_loop
     
    delay:
    //跑马灯延时程序
    sub r2,r2,#1 //sub 减法
    cmp r2,#0x0 //将r0 与0比较
    bne delay //b是跳 ne 是不相等 ,不相等就跳到delay
    mov pc,lr //lr 里存的是调用函数时的下一条指令,让Pc指针指向lr就可以完成函数的返回

    2. MakeFile说明

    1
    2
    3
    4
    5
    6
    7
    led.bin : led.S
    arm-linux-gcc -c -o led.o led.S
    arm-linux-ld -Tled.lds -N led.o -o led.elf
    arm-linux-objcopy -O binary -S led.elf led.bin
    arm-linux-objdump -D -m arm led.elf > led.dis
    clean:
    rm -f *.dis *.bin *.elf *.o

    当我们在Makefile所在目录下执行make命令时,系统会进行如下操作:

    第一步 执行arm-linux-gcc -c -o led.o led.S命令将当前目录下存在的汇编文件led.S编译成led.o文件;

    第二步 执行arm-linux-ld -Tled.lds -N led.o -o led.elf将.o文件链接成elf文件,-Tled.lds 其中led.lds位链接脚本,告诉连接器如何对程序进行链接,以及链接地址等等(下面会有讲解);

    第三步 执行arm-linux-objcopy -O binary -S led.elf led.bin将elf文件抽取为可在开发板上运行的bin文件;

    第四步 执行arm-linux-objdump -D -m arm led.elf > led.dis将elf文件反汇编,便于我们对程序的分析,查找错误等等;

    3. 链接脚本led.lds说明

    1
    2
    3
    4
    5
    6
    7
    SECTIONS {
    . = 0x02023400;
    .text : { *(.text) }
    .rodata ALIGN(4) : {*(.rodata*)}
    .data ALIGN(4) : { *(.data*) }
    .bss ALIGN(4) : { *(.bss) *(COMMON) }
    }

    本文不对链接脚本的具体语法进行介绍,读者可以自已自行google了解

    第2行表示程序的连接地址从0x02023400开始,这表示我们的程序运行之前应该位于内存地址0x02023400字节处,

    BL1会把 BL2复制到0x02023400地址处,再启动它。

    第 3~6行,表示从 0x02023400 开始,依次排放程序的代码段、 只读数据段、数据段、BSS段。

    三、程序编译及烧写

    1.编译

    通过FTP或者其他工具将led.s、Makefile、led.lds 三个文件上传到服务器上去,输入make命令进行编译将得到led.bin文件。

    2.烧写

    将SD卡插入电脑,并让VmWare里的Ubuntu识别出来,然后执行如下命令:

    1
    sudo ./sd_fusing.sh /dev/sdb ../01.led/led.bin
    Tiny4412-Prog

    Tiny4412-Prog

    如图所示,SD卡烧写成功,将SD卡插到Tiny4412开发板上,并设置为SD卡启动,这时你就会看到LED灯在闪烁。

    说明:sd_fusing.sh是一个shell脚本,这个脚本文件,一键烧写程序到 SD 卡中。我们分析该脚本程序,发现其核心命令就3条

    1
    2
    3
    4
    5
    dd iflag=dsync oflag=dsync if=/work/4412/tools/E4412_N.bl1.bin of=$1 seek=$signed_bl1_position
     
    dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position
     
    sync

    第 1行的命令用于将E4412_N.bl1.bin烧写到 SD卡的第 1个扇区 (扇区从 0编号 );

    第 2行的命令用于将bl2.bin烧写到SD卡的第17个扇区;

    第 3行的命令用于将内存缓冲区数据写入磁盘.

    E4412_N.bl1.bin(BL1) 是由三星原厂提供, 没有源码;

    bl2.bin 是通过 mkbl2 工具处理源文件得到,具体实现如下:

    1
    ./mkbl2 leds_on.bin bl2.bin 14336

    mkbl2 是用来生成 bl2.bin 的工具,通过编译 V310-EVT1-mkbl2.c 文件得到,具体如下:

    1
    gcc -o mkbl2 V310-EVT1-mkbl2.c

    通过分析 V310-EVT1-mkbl2.c源码,我们可以知道它主要做了这些工作:

    1). 从源文件中读取14K 的数据到 Buf 当中;

    2). 处理 Buf 中前14332 字节的数据,得到 4字节的checksum ;

    3). 组装 Buf 中前 14332 字节的数据和 4字节的 checksum,得到一个新的 14K 的 Buf 数据;

    4). 将 3) 中构建的Buf 数据写到bl2.bin文件中

    四、上电实验

    如下图所示,可以看到4个led轮流着点亮及熄灭

    tiny4412流水灯效果

    tiny4412流水灯效果

     

    转载于:https://www.cnblogs.com/zzb-Dream-90Time/p/7236164.html

    展开全文
  • 从今天开始就正式进入到tiny4412的开发学习中了,今天主要看了一下Tiny4412的启动流程及存储器映射及Exynos4412数据手册,用汇编写了一个跑马灯程序(后续会有C语言版本的出来),先说一下我的开发环境吧: ...

    本文转载自:http://www.techbulo.com/1313.html

    从今天开始就正式进入到tiny4412的开发学习中了,今天主要看了一下Tiny4412的启动流程及存储器映射及Exynos4412数据手册,用汇编写了一个跑马灯程序(后续会有C语言版本的出来),先说一下我的开发环境吧:

    开发板:Tiny4412 增强版 (底板是Tiny4412ADK 1312)

    开发工具:UltraEdit

    宿主机:VmWare Ubuntu12.04(64bit)

    编译工具:arm-linux-gcc4.5.1

    为了便于分类管理,特意开了一个Tiny4412学习专区,希望对大家有所帮助,下面进入正题,说一下跑马灯程序。

    一、控制原理说明

    先看一下原理图:



    二、程序说明

    1.led.S

    由原理图可知,程序只进行了两步操作;

    第一步:设置GPM4_0~GPM4_3相对应的控制寄存器GPM4CON,使GPM4_0~ GPM4_3四个引脚为输出功能。


    第二步:设置其对应的数据寄存器GPM4DAT对应的4个bit位为0,使GPM4_0~ GPM4_3为低电平,4个LED灯全亮,等待一段时间将第0位设置为0,其余位设置为1,这样只有第一个灯亮;等待一段时间将第1位设置为0,其余位设置为1,这样只有第二个灯亮;等待一段时间将第2位设置为0,其余位设置为1,这样只有第三个灯亮;等待一段时间将第3位设置为0,其余位设置为1,这样只有第四个灯亮;等待一段时间使GPM4_0~ GPM4_3全为高电平,4个LED灯全灭。这样就实现了跑马灯效果。

    程序代码中,也有相关解释这里不做过多说明。

    .text
    .globl _start
    _start:
     
    /*
    * set GPM4 as output
    */
    ldr r0, =0x110002E0 // GPM4CON的地址是0x110002E0
    ldr r1, [r0] // 先读出原值
    bic r1, r1, #0xff00 // 清除bit[15:8]
    bic r1, r1, #0xff // 清除bit[7:0]
    orr r1, r1, #0x1100 // 设置bit[15:8]为0b00010001
    orr r1, r1, #0x11 // 设置bit[7:0]为0b00010001
    str r1, [r0] // 写入GPM4CON
    /*
    * set GPM4DAT as Low For leds
    */
    ldr r0, =0x110002E4 // GPM4DAT的地址是0x110002E4
    ldr r1, [r0] // 读出原值
     
    leds_loop:
     
    bic r1, r1, #0xf // 清除bit[0-3]为0 全亮
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    orr r1, r1, #0xe // 设置bit[0]为0 LED1亮
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    bic r1, r1, #0x3 // 设置bit[1]为0 LED2亮
    orr r1, r1, #1
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    bic r1, r1, #0x6 // 设置bit[2]为0 LED3亮
    orr r1, r1, #2
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    bic r1, r1, #0xc // 设置bit[3]为0 LED4亮
    orr r1, r1, #4
    str r1, [r0] // 写入GPM4DAT
    ldr r2,=0xffffff
    bl delay
     
    orr r1, r1, #0xf
    str r1, [r0] // 写入GPM4DAT 全灭
    ldr r2,=0xffffff
    bl delay
     
    b leds_loop
    halt_loop:
    b halt_loop
     
    delay:
    //跑马灯延时程序
    sub r2,r2,#1 //sub 减法
    cmp r2,#0x0 //将r0 与0比较
    bne delay //b是跳 ne 是不相等 ,不相等就跳到delay
    mov pc,lr //lr 里存的是调用函数时的下一条指令,让Pc指针指向lr就可以完成函数的返回
    2. MakeFile说明

    led.bin : led.S
    arm-linux-gcc -c -o led.o led.S
    arm-linux-ld -Tled.lds -N led.o -o led.elf
    arm-linux-objcopy -O binary -S led.elf led.bin
    arm-linux-objdump -D -m arm led.elf > led.dis
    clean:
    rm -f *.dis *.bin *.elf *.o

    当我们在Makefile所在目录下执行make命令时,系统会进行如下操作:

    第一步 执行arm-linux-gcc -c -o led.o led.S命令将当前目录下存在的汇编文件led.S编译成led.o文件;

    第二步 执行arm-linux-ld -Tled.lds -N led.o -o led.elf将.o文件链接成elf文件,-Tled.lds 其中led.lds位链接脚本,告诉连接器如何对程序进行链接,以及链接地址等等(下面会有讲解);

    第三步 执行arm-linux-objcopy -O binary -S led.elf led.bin将elf文件抽取为可在开发板上运行的bin文件;

    第四步 执行arm-linux-objdump -D -m arm led.elf > led.dis将elf文件反汇编,便于我们对程序的分析,查找错误等等;

    3. 链接脚本led.lds说明
    SECTIONS {
    . = 0x02023400;
    .text : { *(.text) }
    .rodata ALIGN(4) : {*(.rodata*)}
    .data ALIGN(4) : { *(.data*) }
    .bss ALIGN(4) : { *(.bss) *(COMMON) }
    }

    本文不对链接脚本的具体语法进行介绍,读者可以自已自行google了解

    第2行表示程序的连接地址从0x02023400开始,这表示我们的程序运行之前应该位于内存地址0x02023400字节处,

    BL1会把 BL2复制到0x02023400地址处,再启动它。

    第 3~6行,表示从 0x02023400 开始,依次排放程序的代码段、 只读数据段、数据段、BSS段。

    三、程序编译及烧写

    1.编译

    通过FTP或者其他工具将led.s、Makefile、led.lds 三个文件上传到服务器上去,输入make命令进行编译将得到led.bin文件。

    2.烧写

    将SD卡插入电脑,并让VmWare里的Ubuntu识别出来,然后执行如下命令:

    sudo ./sd_fusing.sh /dev/sdb ../01.led/led.bin

    如图所示,SD卡烧写成功,将SD卡插到Tiny4412开发板上,并设置为SD卡启动,这时你就会看到LED灯在闪烁。

    说明:sd_fusing.sh是一个shell脚本,这个脚本文件,一键烧写程序到 SD 卡中。我们分析该脚本程序,发现其核心命令就3条

    dd iflag=dsync oflag=dsync if=/work/4412/tools/E4412_N.bl1.bin of=$1 seek=$signed_bl1_position
    dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position
    sync

    第 1行的命令用于将E4412_N.bl1.bin烧写到 SD卡的第 1个扇区 (扇区从 0编号 );

    第 2行的命令用于将bl2.bin烧写到SD卡的第17个扇区;

    第 3行的命令用于将内存缓冲区数据写入磁盘.

    E4412_N.bl1.bin(BL1) 是由三星原厂提供, 没有源码;

    bl2.bin 是通过 mkbl2 工具处理源文件得到,具体实现如下:

    ./mkbl2 leds_on.bin bl2.bin 14336
          mkbl2 是用来生成 bl2.bin 的工具,通过编译 V310-EVT1-mkbl2.c 文件得到,具体如下:

    gcc -o mkbl2 V310-EVT1-mkbl2.c

    通过分析 V310-EVT1-mkbl2.c源码,我们可以知道它主要做了这些工作:

    1). 从源文件中读取14K 的数据到 Buf 当中;

    2). 处理 Buf 中前14332 字节的数据,得到 4字节的checksum ;

    3). 组装 Buf 中前 14332 字节的数据和 4字节的 checksum,得到一个新的 14K 的 Buf 数据;

    4). 将 3) 中构建的Buf 数据写到bl2.bin文件中

    四、上电实验

    如下图所示,可以看到4个led轮流着点亮及熄灭









    展开全文
  • rootfs tiny4412

    2017-02-14 13:25:06
    rootfs tiny4412
  • Tiny4412Tiny4412开发环境搭建

    千次阅读 2016-11-23 09:05:29
    创建一个ARM目录mkdir /disk/A9 -p接下来你需要准备以下的东西1、arm-linux-gcc-4.5.1 交叉编译器2、linux-3.5-tiny4412 内核3、rootfs_qtopia_qt4-20140124.tar.gz QT文件系统 (做好的)4、busybox-1.22.1.tar...
  • 核心板 : Tiny4412-1306-Schematic 底板 : Tiny4412SDK-1308(没有micro USB)其他都一样 参考博客:https://www.cnblogs.com/pengdonglin137/p/5143516.html 在此感谢前辈分享。 代码已上传至github上管理。...
  • 核心板 : Tiny4412-1306-Schematic 底板 : Tiny4412SDK-1308(没有micro USB)其他都一样 参考博客:https://www.cnblogs.com/pengdonglin137/p/5159032.html 在此感谢前辈分享。 代码已上传至github上管理。...
  • 在前边我们使用汇编完成了一个流水灯实验:Tiny4412汇编流水灯代码,Tiny4412裸机LED操作 ---- - -- -- -- - -- -- 修改: # ${MKBL2} ${SOURCE_FILE} bl2.bin 14336 ...
  • 核心板 : Tiny4412-1306-Schematic 底板 : Tiny4412SDK-1308(没有micro USB)其他都一样 参考博客:https://www.cnblogs.com/pengdonglin137/p/5153794.html 在此感谢前辈分享。 代码已上传至github上管理。...
  • 核心板 : Tiny4412-1306-Schematic 底板 : Tiny4412SDK-1308(没有micro USB)其他都一样 参考博客:https://www.cnblogs.com/pengdonglin137/p/5159032.html 修改设备树文件: diff --git a/arch/arm/boot/...
  • TIny4412 uboot

    2018-08-22 07:54:32
    之前买的友善的板子tiny4412增强版,他们官方提供的uboot只能输出“ok”, 这个版本就是网上说的1506版本的uboot可以进行一些裸板程序的开发
  • uboot_tiny4412

    2018-06-27 02:09:01
    tiny4412 ubooy 源码 可以正常使用
  • dnw,适用于tiny4412

    2019-03-17 01:34:43
    针对tiny4412设备改写过驱动,适用于友善之臂tiny4412
  • tiny4412开发板运行的android系统版本是5.0.2,基于android5.0.2系统,友善之手臂公司提供了基于tiny4412开发板的android5.0.2的内核,内核下载地址: https://download.csdn.net/download/u010094008/10370071内核...
  • Tiny4412开发板手册

    2016-06-23 11:38:57
    Tiny4412开发板手册
  • uboot_tiny4412-master.zip

    2021-03-29 22:26:54
    linux系统f uboot_tiny4412-20130729.tgz的安装 版本名字f uboot_tiny4412-20130729.tgz
  • tiny4412裸机相关程序

    2019-02-01 14:50:42
    嵌入式课程设计所需要的tiny4412裸机相关程序,内含全部的裸机程序代码
  • Tiny4412 zImage文件

    2018-05-25 15:19:53
    该压缩包文件内含zImage文件和说明一份,适用于Tiny4412 1506开发板,注意是1506! 1506!1506!该zImage已关闭TrustZone模式,可搭配内附说明的uboot直接启动开发版!
  • tiny4412 .config

    2014-06-05 11:37:38
    tiny4412 .config
  • Tiny4412 Uboot

    2019-10-06 21:49:26
    1. Build uboot a) 安装好toolchain (arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)并设置好 环境...b) 解压 uboot_tiny4412-20130729.tgz 并进入相应的目录 tar xzf uboot_tiny4412-20130729.tgz c) 配置 uboot 并...
  • Tiny4412数据手册

    2013-09-01 20:57:25
    Tiny4412数据手册 4412 三星 tiny 开发板 平板

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,519
精华内容 1,007
关键字:

tiny4412