我所知道的EC====>Uart

本文介绍了UART(通用异步收发器)在固件(FW)调试中的重要作用,以及如何通过printf、puts、putchar等函数将字符输出到串口。通过分析u-boot中的printf和puts函数实现,揭示了字符如何经过处理后通过串口发送,涉及到串口的波特率、硬件接口和相关寄存器操作。
摘要由CSDN通过智能技术生成

我所知道的EC====>Uart

 

1. Introduction

 

     “没有输出之前调试是一门艺术,有了输出以后调试就是一门技术!”这句话准确的道出了调试程序时能够查看运行状况和环境信息的重要性;尤其在FW环境下debug手段非常有限,uart是几乎所有FW都会采用的debug方式。Uart全称是 Universal Asynchronous Receiver/Transmitter通用异步收发器(异步串行通信口)它包括了RS232RS485等接口和总线标准规范, 它作为一种低速通信协议广泛应用于通信领域。

 

2. Hardware Interface

 

   Uart spec定义了非常多的信号,但debug过程中通常只需要接三根信号RXTXGND就可以了,故常见串口debug线路如下图1所示:

 

 

串口读写数据时数据送往内部的fifo,如果fifo满了数据就会按照顺讯逐个bit送往总线。数据读写的时序和格式如下图2所示:

 

串口通信常见的波特率有192001152009600480024001200 Bps,波特率可以通过寄存器配置。

 

3. How to Implement

 

     前一段时间有同事问我一个问题:”为什么我们EC之中使用printfputs putchar这些函数输出字符,字符会送给串口呢?以前写的DOS下的程序是输出到终端的呀。,他的困惑不无道理,为什么呢?不要着急,让我来告诉你其中的奥秘。若干年以前,我曾经在arm9上面porttingbootloaderu-boot,u-boot也有一个串口debug的部分,所以我就碰巧大致翻了翻这部分的代码,关注过这个问题J.先来看看printf的实现吧,下述代码是u-boot 中的printf code

 

     void printf (const char *fmt, ...)

    {

            va_list args;

            uint i;

            char printbuffer[CFG_PBSIZE];

 

            va_start (args, fmt);

 

            /* For this to work, printbuffer must be larger than

             * anything we ever want to print.

             */

            i = vsprintf (printbuffer, fmt, args);

            va_end (args);

 

            /* Print the string */

            puts (printbuffer);

}

 

注意看红色部分的代码,printf

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值