历史上的今天
今天是:2025年11月17日(星期一)
2022年11月17日 | 将JZ2440调试串口改为COM2
2022-11-17 来源:zhihu
众所周知,JZ2440 V2很小巧。今天单就JZ2440串口讨论一些问题。我们在用串口进行调试时,需要用JZ2440自带的一根USB线连接电脑USB口和开发板的USB-com1口。先来看一下JZ2440串口大致连接图:

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

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

搞懂了串口工作时的连线图之后就可以在此基础上进行修改,以便解决实际使用中遇到的问题。问题马上来了,在用JZ2440开发时,串口在SecureCRT上输出信息。输出信息时,偶尔会使电脑蓝屏。这种情况多发生在有大量数据要显示的时候,比如开机后,执行命令ls -l /dev。于是我将系统换为XP,用了一段时间,电脑不再蓝屏,所以推测是驱动原因。由于使用习惯,随后我又将XP升级到了Win7 ,Win8 ,Win8.1 , 在使用JZ2440时,电脑又频繁出现蓝屏问题。
驱动日期是2010/10/7 ,这个时间点之后的PL2303装上之后无法使用。苦恼了很久,经常蓝屏严重影响开发效率,甚是不爽。细细想来,这个问题并不是由于JZ2440板子问题,只是因为系统原因, 对PL2303支持不是很到位。因此,准备弃用板子自带的调试串口。毕竟其还扩展有三个TTL串口。理论上可行,仔细的看了一下JZ2440原理图,发现了下面的连线图:

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



有了这两个设备不就成了?另外一路调试串口呼之欲出。但是这也只是硬件上的连线而已,下面是软件部分的修改(需要重新编译uboot和内核):
1.首先修改的是uboot: uboot/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: NOTE: Power off/on or press the reset in order to get a valid USB device 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 Data Size: 2439664 Bytes = 2.3 MB Load Address: 30008000 Entry Point: 30008000 Verifying Checksum ... OK XIP Kernel Image ... OK Starting kernel ... 28 到这里uboot的调试信息打印结束,下面就把所有任务交内核了。有的同学编译好内核启动时,卡死在这里,只能说明,uboot正常,内核是否正常不得而知。要想判断内核是否正常,可以查看一下内核打印出来的调试信息。 ② #define CONFIG_BOOTARGS "noinitrd root=/dev/mtdblock3 改为 #define CONFIG_BOOTARGS "noinitrd root=/dev/mtdblock3 大家都知道这个参数是传递给内核的,所以修改本处是告诉内核要把内核的调试信息输出到串口 com2 上。 2.修改内核:文件Linux/.config , 没错,这个就是执行 make menuconfig ①为了简单,我直接修改文件,不再演示图形界面了。 修改此处是让内核输出低级调试信息。说明一下,低级调试信息就是这一句: ②CONFIG_DEBUG_S3C_UART=0 改为 以上4点修改完成后,重新编译uboot和内核,重新烧写、启动。串口修改成功。如果上面4点没有全部修改,可能出现下面的情况:
button for 1 sec
address.
Image (uncompressed)
init=/linuxrc console=ttySAC0"
init=/linuxrc console=ttySAC1"
之后生成的配置文件,我们直接修改它即可。
CONFIG_S3C_LOWLEVEL_UART_PORT=0
改为
CONFIG_S3C_LOWLEVEL_UART_PORT=1
Uncompressing linux…………………………………………………….
done, booting the kernel.
CONFIG_DEBUG_S3C_UART=1
这是告诉Linux系统,要把调试信息输出到串口2上面。有了这一句,你就会看到很多的调试信息,系统启动时,大部分的输出信息都来自这一配置。
uboot的信息在com1上面显示,内核的信息则在com2上显示,这是我曾遇到过的。
史海拾趣
|
所用元件:P沟道MOSFET IRF9530,一个二极管1N4001,一个5W20欧的电阻,一个220V变15V的变压器。 控制信号:采用+12V,-12V进行控制。 现在是这样连接的:220经过变压器的初级,变压器的次级接上个1N4001二极管(只让正电压通过),二极管后接上 ...… 查看全部问答> |
|
电话主叫识别信息传送及接收(俗称来电显示), 简称CID(Calling Identify Delivery),是电信局向被叫 电话用户提供的一种服务项目, 是指在被叫用户终 端设备上显示主叫电话号码、主叫用户姓名、呼叫 日期和时间等主叫识别信息并进行存储, 以供 ...… 查看全部问答> |
|
首先读取F盘500的文件,将数据写入安全区,接着再把安全区的数据写到新的文件中, 一次读写128个扇区以上,新生成的文件是损坏的。读写低于128个扇区的,读写扇区数越低,读写速度越慢。当读写扇区数为128时,速度最快,新生成文件可以正常使用。 ...… 查看全部问答> |
|
准确的问题点已经找到,只要将P2.4设置成输入(P2.0输入,两个端口都对地接10K电阻,其余都设成输出),启动AD P2.0采集,经测试,不论有没有REF输出,P2.4瞬间出现80MV左右的尖脉冲,此时电流都很大。 没有REF输出时,只要将P2.4直接对地短路(接 ...… 查看全部问答> |
|
请教各位大虾,我用F149通过L298N驱动两个9伏的电机。单片机io口直接连电机驱动模块,感觉所有的连线都没有错误,但是电机驱动端输出的电压只有0伏。是不是单片机IO口的电压太低呢??… 查看全部问答> |
|
我是在网上找的44b0的iic程序,但是在读写E2PROM是总是读出个ff,我的开发板用的是st24c08的E2PROM,这个问题困扰我很久了,我也对照了下时序,也没有发现什么问题,请各位坛友一定要帮这个忙啊!下面是程序: void Test_Iic(void) { unsign ...… 查看全部问答> |
|
轮换之前 轮换之后 优先级情况为什么会变成这样呢? [ 本帖最后由 ytzys 于 2012-3-26 10:28 编辑 ]… 查看全部问答> |




