买来开发板已经有一段时间了,刚接触时兴奋至极,后来跟着视频看下去发现似乎自己并没有学到太多东西,于是发现自己可能欠缺的太多以致从课程中无法提取出重要的东西来,所以并没有得到太多的营养成分。因此我个人认为我们还是有必要通过进行实验,在过程中边做边学,这样慢慢进行储备自己的知识。今天我先从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. JavaScript--常用的输出方式

       1.alert("要输出的内容"); 在浏览器中弹出一个对话框,然后把要输出的内容展示出来    2.document.write("要输出的内容");  ...

  2. KKT条件原理

    问题引入 max f(x, y) s.t. g(x,y) <= 0 几何解释 a.  g(x ,y) <= 0为上图中z = 0平面中的圆,圆的边表示g(x, y) = 0,圆的内部表示g ...

  3. Linux基础命令---显示路由表route

    route route指令用于显示或者修改IP路由表.它的主要用途是在使用ifconfig(8)程序配置接口后,通过接口设置到特定主机或网络的静态路由.当使用add或del选项时,路由将修改路由表.如 ...

  4. HDU 2077 汉诺塔IV (递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2077 还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是 ...

  5. [转载]WebService使用的一些总结

    什么是WebService: 这个不用我在这里废话,网上的资料一搜一大把,如果你没有接触过这方面的知识,你可以先去网上查一下.这里我只想说一下我印象比较深刻的几点: WebService是基于soap ...

  6. Unity3d 5.x搭载VS2013使用

    1.   安装unity vs.首先我们打开我们下载的unity vs.然后就会看见里面有3个文件,我们双击UnityVS 2013-1.8.1.msi.进行安装,在其过程狂点击下一步就可以,直到点击 ...

  7. ORCAl存储过程

    1.存储过程结构 1.1 第一个存储过程 create or replace procedure proc1( para1 varchar2, para2 out varchar2, para3 in ...

  8. 需求中碰到的简单Map集合 key相同合并 value的思路

    从两个接口获取到了数据Map集合, 但是要展示到同一页面 根据了播控人为key 将两个返回的进行遍历 将他们存在新的map里面 只有单个key value 就存为(MAP<object,obje ...

  9. SQL Server char,varchar,nchar,nvarchar区别

    SQL Server char,varchar,nchar,nvarchar区别 (1)       定义: char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固 ...

  10. NUL和NULL

    此处讨论C语言中的NUL和NULL 1.NUL是ASCII字符集中'\0'字符的名字,它的字节模式为全0 2.NULL指一个其值为0的指针 3.它们都是整型值,其值也相同,所以可以互换使用 4.然而, ...