众所周知JZ2440 V3很小巧,精致。今天单就JZ2440的串口来讨论一些问题。我们在用串口进行调试的时候,需要用JZ2440自带的一根USB线连接电脑USB口和开发板的USB-com1口。先来看一下JZ2440的串口大致连接图:

从S3C2440芯片上引出TXD0和RXD0到芯片PL2303,大家都知道PL2303是干嘛用的。在单片机开发板上一般都用这个芯片,它的作用就是USB转RS232电平,经过PL2303的转换之后,电脑和开发板即可通信,设置好参数后也就能够显示出开发板的打印信息了。JZ2440在这一点上还有一处可以说说,就是它没有使用其他品牌开发板常用的RS232 DB9接口,这在很大程度上减小了开发板的体积,同时也节减了USB转串口线的花费,可谓一举两得。其他开发板一般是使用哪种接口呢?如下图所示:

其串口工作原理也是一样的,只是接口不同而已,这里也有一个图示:

搞懂了串口工作时的连线图之后就可以在此基础上进行修改,以便解决实际使用中遇到的问题。问题马上就来了,在用JZ2440开发时,串口是在SecureCRT上输出信息的。在输出信息时,偶尔会使电脑蓝屏。这种情况多发生在有大量数据要显示的时候,比如开机后,执行命令ls -l /dev 可能就会导致电脑蓝屏。于是我将系统换为XP,用了一段时间,没有出现蓝屏,所以应该是驱动的原因。由于使用习惯的问题,随后我的系统从XP升级到了Win7 ,Win8 ,Win8.1 .在使用JZ2440时,又频繁地出现了蓝屏问题,并且这个PL2303的驱动就像DNW的驱动一样,特别难安装。驱动日期是2010/10/7 ,这个时间点之后的PL2303装上之后无法使用。

不过最终驱动还是装上了,这个问题苦恼了很久,经常蓝屏,严重影响开发效率,并且蓝屏之后电脑很久之后才能启动,甚是不爽。细细想来,这个问题并不是因为JZ2440板子的问题,只是因为系统原因,对PL2303芯片的支持不是很到位。为了解决这个问题,我想弃用板子自带的调试串口。毕竟板子上还扩展有三个TTL串口可以用嘛。理论上没有理由不行啊,所以打算尝试一下。我又仔细的看了一下JZ2440的原理图,发现了下面的连线图:

有三个TTL串口可供选择,但是com1接口与USB-COM1来同一处,所以避免不必要的麻烦,我打算使用com2来充当调试串口。如果直接在电脑与开发板之间接一条线是肯定不行的。原因很简单嘛,电平不一样,两者是无法通信的。仿照原有电路,我找到了下面的几个设备:



有了这3个设备不就成了?另外一路调试串口呼之欲出。但是这也只是硬件上的连线而已,下面是软件部分的修改(需要重新编译uboot和内核):
1.首先修改的是uboot部分, 修改文件u-boot/include/configs/100ask24xx.h ,根据具体的板子找对应的文件即可。

#define CONFIG_SERIAL1          1  
改为 
#define CONFIG_SERIAL2          1

修改这一处,目的是告诉bootloader, 系统启动时要把bootloader的调试信息输出到串口 com2 上。那到底哪些才是bootloader的调试信息呢?在下面:

U-Boot 1.1.6 (Sep 19 2014 - 22:44:53)

DRAM:  64 MB

Flash:  2 MB

NAND:  256 MiB

In:    serial

Out:   serial

Err:   serial

UPLLVal [M:38h,P:2h,S:2h]

MPLLVal [M:5ch,P:1h,S:1h]

CLKDIVN:5h

+---------------------------------------------+

| S3C2440A USB Downloader ver R0.03 2004 Jan  |

+---------------------------------------------+

USB: IN_ENDPOINT:1 OUT_ENDPOINT:3

FORMAT: <ADDR(DATA):4>+<SIZE(n+10):4>+<DATA:n>+<CS:2>

NOTE: Power off/on or press the reset button for 1 sec

in order to get a valid USB device address.

Hit any key to stop autoboot:  0

Booting Linux ...

NAND read: device 0 offset 0x60000, size 0x400000

Reading data from 0x45f800 -- 100% complete.

4194304 bytes read: OK

## Booting image at 30007fc0 ...

Image Name:   Linux-3.4.2

Created:      2014-09-19  15:10:15 UTC

Image Type:   ARM Linux Kernel Image (uncompressed)

Data Size:    2439664 Bytes =  2.3 MB

Load Address: 30008000

Entry Point:  30008000

Verifying Checksum ... OK

XIP Kernel Image ... OK

Starting kernel ...

到这里,uboot的调试信息打印结束,下面就把所有任务交给内核了。有的同学编译好内核,启动时,卡死在这里,只能说明,你的uboot是正常的,内核是否正常就不得而知了。要想判断内核是否正常,可以查看一下内核打印出来的调试信息。

#define CONFIG_BOOTARGS         "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0"
改为
#define CONFIG_BOOTARGS         "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC1"

大家都知道这个参数是要传递给内核的,所以修改本处,是告诉内核要把内核的调试信息输出到串口 com2 上。

2.修改内核部分,修改文件linux/.config ,没错,这个就是执行 make menuconfig 之后生成的配置文件,我们直接修改它即可

①为了简单,我直接修改文件,不再演示图形界面了。
CONFIG_S3C_LOWLEVEL_UART_PORT=0
改为
CONFIG_S3C_LOWLEVEL_UART_PORT=1

修改此处是让内核输出低级调试信息。说明一下,低级调试信息就是这一句:

Uncompressing Linux............................................................. done, booting the kernel.

②CONFIG_DEBUG_S3C_UART=0
改为
CONFIG_DEBUG_S3C_UART=1
这是告诉Linux系统,要把调试信息输出到串口2上面。有了这一句,你就会看到很多的调试信息,系统启动时,大部分的输出信息都来自这一配置。

以上4点修改完成后,重新编译uboot和内核,重新烧写,启动。好了,串口就修改成功了。如果上面4点没有全部修改,则可能出现下面的情况:
uboot的信息在com1上面显示,内核的信息则在com2上显示,这是我曾遇到过的。

转自韦老师的整离

附上二维码

将JZ2440的调试串口换成com2的更多相关文章

  1. hexo next主题深度优化(五),评论系统换成gittalk

    文章目录 背景: 开始: 新建comments_git.js 找到comments.swig在最后一个endif之前 引入代码 pjax加入gitalk 遇到的问题 所有的页面共享的一个评论issue ...

  2. stm32外部时钟源8M换成12M后库函数相应修改总结

    前言 在做“自制继电器上位机控制软件”项目的时候,下位机用到USB虚拟串口,将以前写好的USB虚拟串口程序移植到下位机,发现程序计算机无法识别到虚拟串口STMicroelectronics Virtu ...

  3. Win8换成Win7系统问题小结(修改主板BIOS方法)

    问题描述: 笔记本电脑W8系统使用不习惯,想要换成W7系统,但不管是用光盘安装亦或是用U盘安装,在设置系统启动项的时候,选择从光盘启动或从U盘启动,但是回车点了之后没反应. 下面就说说问题的原因及解决 ...

  4. imx6 关闭调试串口

    需要关闭imx6调试串口,用作普通的串口使用. 参考链接 http://blog.csdn.net/neiloid/article/details/7585876 http://www.cnblogs ...

  5. php 把数字1-1亿换成汉字表述,例如 150 转成 一百五十

    /* 额,重新修改了下.现在估计没什么问题了.... */ 直接上实例 写到 千亿上了. /** * @author ja颂 * 把数字1-1亿换成汉字表述,如:123->一百二十三 * @pa ...

  6. 【代码笔记】iOS-把<br!>换成\n

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...

  7. am335x 更改调试串口

    /********************************************************************* * am335x 更改调试串口 * * am335x的调试 ...

  8. iOS: 上传App到AppStore,由于Xcode上传太慢,换成Application Loader上传,速度秒传

    一.遇到的遭遇 在之前的项目开发中,本人有点固执,一直采用xcode打包后再上传,结果可想而知: (1)要么上传时速度慢的跟蜗牛似的,等的我心力交瘁(不排除网络不给力的原因,公司这个吊问题快把我气疯了 ...

  9. svn的差异查看器和合并工具换成BCompare.exe

    svn的差异查看器和合并工具换成BCompare.exe

随机推荐

  1. JS事件委托学习(转)

    JS 事件委托就是利用冒泡原理,把事件加到父级上触发,执行效果. 好处: 1.提高性能 2.新添加的元素还会有之前的事件     <</</</</li></ ...

  2. javascript 分页组件

    自己写的一个简单的分页组件,主要功能还有实现都在JS中,html页面中只用增加一个放置生成分页的DIV,并给定容器的id. html结构如下: <ul class="paginatio ...

  3. hdu2296Ring(ac自动机+dp)

    链接 dp[i][j]表示长度为i在节点J的时候的权值最大值,根据trie树转移一下就行,需要每次都取最小的,所以需要另开一数组保存字典序最小的状态. #include <iostream> ...

  4. jQuery的环境配置

    目前最新的版本,是 1.10.1 和 2.0.2,如果你需要引用到你线上的项目,就必须使用压缩版,去掉了注释和空白,是容量最小. 从CDN中载入JQuery,如Google中载入JQuery: htt ...

  5. nginx 负载均衡策略

    nginx 负载均衡策略   1. 轮询轮询方式是nginx负载均衡的默认策略,根据每个server的权重值来轮流发送请求,例如:upstream backend {server backend1.e ...

  6. css学习笔记 1

    对于一个页面,如何控制页面的结构就看如何去理解css的各个属性了,只有了解了css的各个属性后才能更有效的让css控制页面的任何一个结构. css的结构:选择符:{属性名1:属性值; 属性名2:属性值 ...

  7. 关于makefile

    0 Makefile概述 -------------------------------------------------------------------------------- 什么是mak ...

  8. win7任务栏只显示日期不显示年月日

    某一天突然发现笔记本任务栏上的时间显示只剩下了时间,没有了年月日 于是百度 搜到的结果大多是如何设置显示的格式  yyyy-MM-dd 继续搜 终于搜到了正确答案 结果令我瞠目结舌  着实无奈 是因为 ...

  9. Android 图片圆角的设置

    ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

  10. 使用Maven构建RichFaces 4.x项目

    使用Maven构建RichFaces 4.x项目 目录 开始之前 第一步 - 创建Maven项目 第二布 - 添加依赖文件 第三步 - 配置RichFaces 第四步 - 创建显示页面 开始之前 本文 ...