买来开发板已经有一段时间了,刚接触时兴奋至极,后来跟着视频看下去发现似乎自己并没有学到太多东西,于是发现自己可能欠缺的太多以致从课程中无法提取出重要的东西来,所以并没有得到太多的营养成分。因此我个人认为我们还是有必要通过进行实验,在过程中边做边学,这样慢慢进行储备自己的知识。今天我先从GPIO实验进行总结和归纳出自己遇到的一些问题。

 

  首先我们要在linux下进行程序的开发,然后将程序发送到windows下,并通过USB转串口烧录到我们的开发板上进行运行,那么在进行一个实验之前首先要将自己的工具准备好,这样才能正常进行下去。

  关于我个人而言,在之前我是通过windows下的串口工具secureCRT,该工具可以进入uboot的界面,通过uboot界面的一些选项来进行下载,通过dnw工具进行文件的传送,它是一个usb工具,可以通过它对具有usb下载功能的bootloader。对于串口工具的使用,我们需要进行安装串口驱动(我看了开发板上使用的是PL2303TA芯片,这里应安装相应的驱动PL2303),我们也可以通过驱动精灵进行安装。对于dnw也需要进行驱动的安装,我这里通过一个zadig软件进行安装的。

  实验一:led1的点亮(汇编语言进行编写)

   (1)首先我们看一下led原理图

     

         从上图来看,led是上拉方式

     

       led对应着s3c2440的三个管脚(GPF4,GPF5,GPF6)

    (2)这里要使用到的寄存器有GPFCON和GPFDAT,通过读写寄存器的地址来访问寄存器,其中GPFCON可以进行设置引脚的输入输出以及中断等功能,改变GPFDAT相应位可以改变引脚电平状态。

    (3)相关的信息

         寄存器地址:

           GPFCON:0x56000050

           GPFDAT: 0x56000054

         GPFCON控制相应引脚的位:

           GPF4: [9:8]

           GPF5: [11:10]

           GPF6: [13:12]

    (4)程序:

led.S

.text                       @代码段

.global _start              @全局函数

_start:

    ldr  r0,0x56000050

        mov  r1,#0x00000100

        str  r1,[r0]

        ldr  r0,0x56000054

        mov  r1,#0x00000000

        str  r1,[r0]

halt_loop:

      b  halt_loop

Makefile:

led.bin: led.S

  arm-linux-gcc -g -c -o led.o led.S              //编译不链接

  arm-linux-ld -Ttext 0x00000000 -g led.o led_elf //链接(指定运行地址)

  arm-linux-objcopy -O binary -S led_elf led.bin

clean:

  rm -f  led_elf led.bin *.o

    (5)我们进行make后,就生成了led.bin文件,然后烧录到开发板中,切换nand启动,nand前4k的代码就被复制到SRAM中开始执行,这样就可以看到现象了,如果没有现象的话,再进行分析,查找原因 

通过本次实验的同时也遇到了许多的拦路虎,然后就进行下一环节我将进行归纳:

 

  工具的准备过程中:

  1》由于我使用的是学校的局域网,笔记本电脑上仅仅支持无线网卡,没有路由,不能使用tftp方式进行文件的上传,于是就尝试使用dnw进行文件的上传。在dnw驱动的安装过程中,我第一次使用的是百问网的dnw驱动,该驱动由于未知原因不能正常使用。于是在群中进行探讨,他们使用的是新版本的dnw v5.2,使用了几天后又出现问题。我发现有可以在linux下的dnw_for_linux和dnw一样的效果,并且可以在linux下直接文件上传,通过linux下的超级终端minicom进行对uboot界面进行控制。于是乎我有开启了这条小路,但是小路不好走,最终败在minicom下的乱码。无奈之下我又试了一下原先方法,最后我居然成功了。

  远水不解近渴,我还是先用这种方法进行学习吧,毕竟浪费了我两天多的时间。我列出下面的问题,如果有解决的博友们,希望你们可以可以留言告知我(下面留言或扣扣:2582305540),在这里谢谢各位了。

  首先是dnw_for_linux的安装:

    dnw_for_linux下载地址:http://linux.linuxidc.com/

    参考文档:http://www.linuxidc.com/Linux/2011-12/48966.htm

              http://blog.csdn.net/u011452544/article/details/39393857

              http://www.linuxidc.com/Linux/2011-12/48961.htm

   

    1># tar xvf dnw_for_linux.tar.gz 对压缩包进行解压

  注意:secbulk目录下是PC端USB驱动, dnw目录是下载工具

   

    2># cd /mnt/hgfs/file/dnw_for_linux/secbulk/  --打开secbulk

      # make -C /lib/modules/2.6.31-14-generic/build/(此处是空格) M=/mnt/hgfs/file/dnw_for_linux/secbulk/        --切换到上面的目录,编译usb驱动模块

  注意:2.6.31-14-generic是我的当前内核启动版本  

   

    3>编译好后会出现secbulk.ko文件  # ls

4># sudo insmod ./secbulk.ko  --加载模块到Linux内核

   

    注意:每次开机都要加载一次那个.ko模块,大家可以自己将它写到开机脚本里,省去了每次都要手动加载的麻烦!

      # dmesg                      --查看是否加载成功

       

     看到这样两行就说明成功了...

     5># cd ../dnw# gcc -o dnw dnw.c   --编译dnw工具

     6># sudo cp dnw /usr/local/bi     --将文件copy到/usr/local/bin目录

     7>这样就可以在shell下面直接使用dnw命令了

     8>在minicom的输出信息Enter your selection:               n                                            USB host is connected. Waiting a download. 

     9>此时,打开另一个终端:# sudo dnw 1.binlibing

                            @ubuntu:~$ sudo dnw 1.binfile

                            name : 1.binfile size : 1214004 bytesWriting data...100%

    

    我安装之后出现下面的问题在shell界面进行下载时出现了can not open /dev/secbulk0

 

 于是乎我通过百度得知是因为dev下没有对应设备文件secbulk0,解决办法:

  

   1>#cd /mnt/hgfs/file/dnw_for_linux/secbulk/   --进入secbulk文件夹中,里面有一个secbulk.c的文件

   2>#...vi secbulk.c

   3> 查看里面的主设备号和次设备号是否和自己使用的产品一致

  

   4>将开发板与PC 连好SD卡启动进入bootloarder如果是菜单模式随意选择一个下载指令如果是命令模式则输入dnw 050008000(地址随意),在linux命令行输入lsusb 这时会出现一串的usb设备,查看自己的设备进行相应的修改,上图中第一个是主设备号,第二个是次设备号

  这里我lsusb后发现没有自己的设备,经自己和他人进行交流发现要在虚拟机中进行  虚拟机->可移动设备->进行串口与虚拟机的链接(这样就和主机断开了),然后进行lsusb后就可以看到自己的设备号了。。。我使用是2440,设备号是上图中的。

  

  对于dnw_for_linux已经安装成功后,我们需要安装linux下的minicom进行串口通信:

   1># sudo apt-get install minicom  --安装minicom

   2># sudo apt-get install lrzsz    --安装lrzsz(在通过串口用xmodem协议烧写内核 时会提示没有xmodem协议,所以这时就要安装lrzsz软件包了)

   3>这样就可以使用minicom进行通信了。

进行minicom的配置:

   1># sudo minicom -s

   2>选择Serial port setup

   3>按下a键,修改/dev/ttyS0后回车   --选择UART0

   4>按下e键,修改波特率115200 8N1

   5>按下f键,将Hardware Flow Contro修改为NO,在刚才主菜单中选择Save setup as dfl,保存为默认配置,最后选择Exit from minicom,退出配置菜单

开发板与电脑进行串口线的连接后在minicom中使用命令 sudo minicom进入minicom界面就可以了。

  这里我遇到的问题是:

   (1)minicom配置好后出现can not open /dev/ttyusb0  

        

       --解决办法在虚拟机的可移动设备中将串口线选择“连接”,这样在/devx下就会出现ttyusb0

       

   (2)minicom出现乱码

       

       --暂时没有得到解决

       我在网上寻找了已经解决的方法:

          《1》换一根好的串口线

          《2》升级minicom版本,然后通过 “-R”可以进行自动格式转换

       起初我设置了一下编码格式,并没有改善,如果有朋友有这方面的解决经验,希望能够分享一下,在此谢谢了。 

JZ2440之GPIO篇的更多相关文章

  1. 树莓派4硬件---GPIO篇

    树莓派拿到手已经两个多月了,其实从最开始的期待安装好ROS,到前几天完成了ROS的源码编译安装,对linux的调教也时花了些时间的.现在终于想起来,树莓派上还有GPIO,还没有用过了.说干就干,开始. ...

  2. TGL站长关于常见问题的回复

    问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...

  3. JZ2440 裸机驱动 第5章 GPIO接口

    本章目标:     掌握嵌入式开发的步骤:编程.编译.烧写程序.运行     通过GPIO的操作了解软件如何控制硬件 5.1 GPIO硬件介绍     S3C2440A有130个多功能输入/输出口引脚 ...

  4. RK3399/NanoPC-T4开发板使用/sys/class/gpio操作外接GPIO设备-【申嵌视频-RK3399篇】

    实验2:RK3399/NanoPC-T4开发板使用/sys/class/gpio操作外接GPIO设备,比如外接一个LED模块,通过GPIO1_A0管脚 1 介绍   LED模块   Matrix-LE ...

  5. Hi35xx 通用GPIO 使用篇(板子3G电源控制脚说明)

    在一个嵌入式系统中使用最多的莫过于 通用输入输出 GPIO口.看到论坛中经常有朋友问海思为什么没有提供GPIO驱动.其实不然. 在海思SDK  xxx/osdrv/tools/board_tools/ ...

  6. STM32 HAL库学习系列第2篇 GPIO配置

    GPIO 库函数 基本就是使用以下几个函数 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void H ...

  7. DSP5509的GPIO学习-第5篇

    1. 使用CCS V6.1版本,目前已经不局限于仅仅把实验搞清楚了,要深入去探究内部的原理,本章看下GPIO实验 2. 在CCS启动的时候,提示,这个问题是什么,XDAIS是什么?XDAIS (eXp ...

  8. 硬件——nrf51822第一篇,GPIO的使用

    未完,待续...... 本实现是基于一个开发箱,包括:综合应用开发系统主板XT-EDU-AK   1套: 手持终端系统 XT-EDU-HK 1套: GPIO操作 工程: 这是一个关于流水灯的程序: 我 ...

  9. ESP8266 LUA脚本语言开发: 外设篇-GPIO中断检测

    https://nodemcu.readthedocs.io/en/master/modules/gpio/#gpiomode 测试引脚 GPIO0 gpio.mode(,gpio.INT) func ...

随机推荐

  1. Python大神成长之路: 第三次学习记录 集合 函数 装饰 re

    学习记录day03   字符串可以直接切片,But字符串不可修改 字符串修改:生成了一个新的字符串 LIst修改,在原基础上修改(原内存上)     集合是一个无序的,不重复的数据组合,它的主要作用如 ...

  2. RocketMQ 问题汇总

    1. rocketMQ安装: 编译完成以后准备启动项目,注意:bin的位置是编译后target目录下,启动命令在这里. linux命令目录:你的目录/rocketmq-all-4.2.0/distri ...

  3. byte & 0xff char 转换

    https://blog.csdn.net/lixingtao0520/article/details/75450883 版权声明:本文为博主原创文章,转载请注明作者与出处,http://blog.c ...

  4. JustOj 1415: 字符串解压

    题目描述 豆豆非常调皮,总喜欢把一样的东西摆在一起,然后用神奇的猫爪功把他们揉成一团. 比如一堆A,就会被揉成个数+A. 这就是豆豆的字符串压缩算法了. 比如给豆豆一个字符串:ABBCCCDDDDEE ...

  5. IPERF 网络性能测试

    Iperf 是一个网络性能测试工具.Iperf可以测试最大TCP和UDP带宽性能.Iperf具有多种参数和UDP特性,可以根据需要调整.Iperf可以报告带宽,延迟抖动和数据包丢失. Iperf 参数 ...

  6. vue生产环境清除console.log

    npm run build 后的生产环境的代码,会有很多开发时留下的console.log(),不可能每个页面不停地删除 在build/webpack.prod.conf.js文件里加上这样一段代码即 ...

  7. 关于数据库主从表、主键PRIMARY KEY 外键约束 FOREIGN KEY 约束----NOT NULL,DEFAULT,CHECK

    如果由两个列共同组成主键,而且一个子表将主键作为可为空值的外键来继承,就可能得到错误的数据.可在一个外键列中插入有效的值,但在另一个外键列中插入空值.然后,可添加一个数据表检查约束,在可为空的外键中检 ...

  8. 记账本微信小程序开发二

    新建一个微信小程序项目 熟悉软件各种操作.

  9. 介绍python中运算符优先级

    下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合).这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符. ...

  10. 解决keepalived脑裂问题

    检测思路:正常情况下keepalived的VIP地址是在主节点上的,如果在从节点发现了VIP,就设置报警信息 脚本如下: #!/bin/bash # 检查脑裂的脚本,在备节点上进行部署 LB01_VI ...