精华内容
下载资源
问答
  • UART接口

    2017-08-08 19:42:04
    但是我们经常搞不清楚它和COM口的区别, 以及RS232, TTL等关系, 实际上UART,COM指的物理接口形式(硬件), 而TTL、RS-232是指的电平标准(电信号). UART有4个pin(VCC, GND, RX, TX), 用的TTL电平, 低电平为0(0V),高...

    简单的讲:(UART与COM)

          嵌入式里面说的串口,一般是指UART口, 但是我们经常搞不清楚它和COM口的区别,  以及RS232, TTL等关系,  实际上UART,COM指的物理接口形式(硬件), 而TTL、RS-232是指的电平标准(电信号).

          UART有4个pin(VCC, GND, RX, TX), 用的TTL电平,  低电平为0(0V),高电平为1(3.3V或以上)。

                                                                                   

        COM口是我们台式机上面常用的口(下图),9个pin, 用的RS232电平,  它是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平

                                                           

    详细的说:

    UART的特征

            一般uart控制器在嵌入式系统里面都做在cpu一起,像飞思卡尔的IMX6芯片就是这样,有多个uart控制器。

    引脚介绍(COM口比较多pin,但是常用的也是这几个):

    VCC:供电pin,一般是3.3v,在我们的板子上没有过电保护,这个pin一般不接更安全

    GND:接地pin,有的时候rx接受数据有问题,就要接上这个pin,一般也可不接

    RX:接收数据pin

    TX:发送数据pin,我之前碰到串口只能收数据,不能发数据问题,经baidu,原来是设置了流控制,取消就可以了,适用于putty,SecureCRT

            在调试的时候, 多数情况下我们只引出rx,tx即可.  比如调试gps模块, IC数据直接通过uart上报,我就直接用了两个线连出了rx,tx,连上串口转USB小板,  电脑从串口直接获取数据,这样跳过了开发板,测试了gps的数据有没有问题.

    使用方法:

            我们常用UART口进行调试,但是UART的数据要传到电脑上分析就要匹配电脑的接口,通常我们电脑使用接口有COM口和USB口(最终在电脑上是一个虚拟的COM口),但是要想连上这两种接口都要需要进行硬件接口转换和电平转换。

             如果连接电脑COM口, 需要一个类似下图的转换小板, 它实现了TTL电平和RS232电平互转, 我之前使用过, 但是现在很少用了。

                       

                  如果要连接USB接口, 需要类似下面的小板, 它实现了TTL电平和USB电平的转换, 这种使用的较多。

                           

                  电路图和连接如下, 通常上面有个专门转换芯片。

     

    总结

    1、串口、COM口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指的电平标准(电信号)。 
    2、接设备的时候,一般只接GND RX TX。不会接Vcc或者+3.3v的电源线,避免与目标设备上的供电冲突。 
    3、PL2303、CP2102芯片是 USB 转 TTL串口 的芯片,用USB来扩展串口(TTL电平)
    4、MAX232芯片是 TTL电平与RS232电平的专用双向转换芯片,可以TTL转RS-232,也可以RS-232转TTL。 
    5、TTL标准是低电平为0,高电平为1(+5V电平)。RS-232标准是正电平为0,负电平为1(±15V电平)。 
    6、RS-485与RS-232类似,但是采用差分信号负逻辑。这里略过不讲。 

    百度上这个文章总结的不错:

             串口、COM口、TTL、RS-232、RS-485区别详解

    其他

     

    串口进行通信的方式有两种:同步通信方式和异步通信方式

    SPI(Serial Peripheral Interface:串行外设接口);
    I2C(INTER IC BUS:意为IC之间总线),一(host)对多,以字节为单位发送。

    UART(Universal Asynchronous Receiver Transmitter:通用异步收发器), 一对一,以位为单位发送。

    UART->RS232

    展开全文
  • FPGA UART接口

    2013-04-28 19:57:09
    FPGA UART接口 使用FPGA技术产生UART接口的技术,你懂得。
  • UART接口介绍

    千次阅读 2017-06-02 13:47:19
    UART接口介绍
    UART接口介绍
        UART是Universal Asynchronous Receiver and Transmitter简称,中文为通用异步接收和发送器,是常用的串行通讯接口。
     
    一、数据格式
        UART作为异步传输接口,接口不需要共用同一个时钟,只需通讯双方在传输过程中的时钟频率大小保持一致。
    图1 数据帧结构
     
        数据帧包括:起始位、数据位、奇偶校验位、停止位。
    1、起始位:表明将要发送数据,传输字符开始,起始位为低电平“0”;

    2、数据位(资料位):数据位可以是5 bits、6 bits、7 bits或者8 bits,常用为8 bits(ASCII码),从最低位开始发送,依靠时钟进行定位;

    3、奇偶校验位:传输数据位加上这一位后使得1的位数应为偶数(偶校验)或奇数(奇校验),通过该方式来校验数据传输的正确性。
    4、停止位:表明数据传输结束,停止位为高电平“1”。停止位的宽度可能是1bit、1.5bit、或者2bit的高电平,数据在传输线上定时,每个设备有自己的时钟,通讯设备之间很可能出现微小不同步,所以停止位不仅仅表示传输的结束,并且提供设备之间校准时钟同步的机会;
     
     5、空闲状态:当UART未发送数据时,数据线TX、RX状态为高电平“1”;
     
     6、波特率:每秒钟传输的数据位,此时可以等同于比特率。常用的UART波特率为:9600、115200。波特率是衡量数据传输速率的指标,表示每秒钟传输的符号数(symbol),一符号代表信息量(比特数)与符号的阶数有关,如果用256阶符号-8bits表示一个符号;
     7、回环操作(loopback):UART可以进入一个内部回环模式,用于诊断或调试;
     8、buffer一般是用FIFO(First in First out),目的是提高系统性能。
     
     
     
    二、工作原理
        UART控制器中包含四种寄存器:输出缓存寄存器、输出移位寄存器、输入缓存寄存器、输入移位寄存器。
        输出缓存寄存器:该寄存器用来存放处理传输过来的并行数据。
        输出移位寄存器:读取输出缓存寄存器中的值,将并行数据串行输出,LSB先传输。
        输入移位寄存器:接收对方UART接口传输的串行数据,一帧数据接收完毕后,将把数据传输给输入缓存寄存器。
        输入缓存寄存器:保存从输入移位寄存器传递过来的串行数据。
    图2 UART工作原理
     
    UART接口数据线
    1、RX:接收数据
    2、TX:发送数据
    3、GND:数字地
    4、VCC:直流电源
     
     
    三、电平转化
        UART采用TTL电平,若两台嵌入式设备通讯,可以直接连接。PC采用逻辑负电平,PC与嵌入式设备通讯,就必须通过芯片MAX232进行电平转化。
    逻辑负电平:逻辑“1”(-5V -- -15V),逻辑“0”(5V --- 15V)
     
    四、案例----逻辑分析仪
     
     
    五、串口调试工具测试
    对于串口数据,是一种无符号整形数据类型,所以常用以下有两种表示方式:1、字符;2、十六进制;(串口调试工具默认为该两种方式)
     

     

     

     

     

    五、Invertion(电平反转)

    1、DUT已经配置为TX invertion,逻辑分析仪也调整好协议格式(invertion)

    DUT发送字符S(0x53),逻辑分析接收数据如下:

     

     

     

    示波器抓波形:

    2、Tx数据也反转

    DUT发送字符S(0x53),逻辑分析接收数据如下:

    示波器抓取数据:

    六、UART break信号

    1、space state:低电平

    2、mark state:高电平,或者可以理解为idle state;

    展开全文
  • UART接口芯片一般引脚较多,内含许多辅助模块和一些辅助功能,在实际使用时往往用不到这些功能,因此若采用UART专用芯片,必将使电路变得复杂,PCB面积增大,从而导致成本增加,系统的稳定性和可靠性降低。...
  • 本文简要介绍了UART并介绍了基于FPGA的UART接口模块的设计。
  • 废话不多说,先上源代码链接和testbench...本篇所写的uart接口的内部寄存器的定义如下表: 表1 内部寄存器定义 寄存器名 地址 属性 说明 复位寄存器 0x00 w/r 低3位才有意义,第0位用于对发送电

    废话不多说,先上源代码链接testbench的链接,推荐使用UE查看源代码,UE中的VHDL语法、Verilog语法和SystemVerilog语法高亮文件的下载链接在这里。上篇的最后给出了本篇所附代码的uart通信模型的工作过程。本篇的主要内容在源代码里,因此文章内容略显简单。

    一、寄存器描述

    本篇所写的uart接口的内部寄存器的定义如下表:

    表1 内部寄存器定义
    寄存器名 地址 属性 说明
    复位寄存器 0x00 w/r 低3位才有意义,第0位用于对发送电路进行复位,第1位用于对接收电路进行复位,第2位用于对控制电路进行复位,都是高电平有效。复位时先写入1,再写入0。
    分频控制寄存器 0x01 w/r 用于对内部分频计数器进行读写操作,以使uart满足不同的波特率。
    发送寄存器 0x02 w 用于将需要发送的数据锁存到这个寄存器中。
    命令寄存器 0x03 w 低1位有意义,写这个寄存器会产生一个时钟宽度的控制信号,这个控制信号用于通知发送电路可以发送数据了。
    接收寄存器 0x04 r 只读,用于存储当前接收到的完整数据。
    接收状态寄存器 0x05 rc 读清0,低2位有意义,第0位表示接收到的数据奇偶校验是否有错,为0表示没有错,第1位表示接收中断,为1表示CPU可以读取接收寄存器了。
    发送状态寄存器 0x06 rc 读清0,低1位有意义,第0位表示发送中断,为1表示当前发送寄存器中的数据已经发送完成。

    二、源代码组成分析

    链接中给出的源代码由4个.v文件组成,其中uart_xmt.v是发送控制器,uart_rcv.v是接收控制器,uart_ctl.v是控制电路。uart_xmt.v和uart_rcv.v中各有一个状态机,uart_ctl.v中有两个状态机,这里不给出过多的解释,代码中我都给出了详细注释。核心设计思想就是设置一个采样脉冲,这个采样脉冲的频率是和波特率相关的(在本设计中就等于波特率),由此来控制发送数据和接收数据,奇偶校验使用的策略是按位异或。

    三、对于本篇testbench的说明

    所附testbench中的时钟为25MHZ,时钟计数器为16,这样子传输波特率很高,这是为了仿真方便。实际情况下波特率可能没有这么高,对于115200波特率的串口,在25MHZ时钟下,只需要设置时钟计数器的值为25000000/115200=217,就可以了,这里不需要特别精确,这就是异步串口通信的好处。当然,如果需要比较低的波特率,8位时钟计数器分频已经不够了,则需要将25MHZ时钟再次分频后输入uart串口中。

    本篇的testbench较之于我以前文章中描述的简单的testbench在复杂程度上有所上升,主要体现在随机化激励和自动比对上。

    所附testbench的代码中将UART的输入和输出相连形成回环测试,先用CPU控制UART输出一个随机数据,然后回环到UART的输入,再用CPU读出来,将输出数据和读出的数据进行自动比对。代码中的CPU的读写操作和自动比对操作都必须定义成任务,不能定义成函数,因为任务是要花费仿真时间的。

    这样子的testbench在实际工程中很常用,因为无论什么通信接口,回环测试是很有必要的,在回环测试时,如果对着仿真波形一个一个比对接收和发送数据,很浪费时间,必须要学会编写自动比对任务,此外,testbench中用到的随机激励也是测试bug的好方法。

    下一篇文章中我将介绍Xilinx自带的uart接口的IP,这是一个用户端满足AXI总线协议的UART接口。

     

    展开全文
  • 基于xilinx公司的KC705开发板,设计了一套基于FPGA的UART接口,亲测收发无误
  • Linux UART接口调试技巧

    万次阅读 2017-03-03 10:27:14
    在嵌入式项目中,UART接口的使用频率很高,多种模块(2G通信模组、蓝牙模块,等等)都会通过UART接口与主控MCU相连。本文将梳理UART接口调试流程,为调试工作提供参考,解决调试过程中可能遇到的问题,快速完成UART...

    在嵌入式项目中,UART接口的使用频率很高,多种模块(2G通信模组、蓝牙模块,等等)都会通过UART接口与主控MCU相连。本文将梳理UART接口调试流程,为调试工作提供参考,解决调试过程中可能遇到的问题,快速完成UART接口调试,实现模块功能。

    配置驱动选项

    首先查看原理图确认串口号,比如UART1,同时查看该串口引脚是否有复用功能,比如用作SD卡接口。如果有复用,需要在内核配置中取消复用功能的选项。然后选中串口功能,大致的路径为

    Device Drivers > Character devices > Serial drivers

    不同厂家提供的BSP有细微差别,具体路径视情况而定。在内核根目录输入make menuconfig打开内核配置界面,选中UART1。以nuc970 为例,配置如下:

    $ make menuconfig

    这里写图片描述

    产生UART设备节点

    编译运行内核,如果UART1驱动加载成功会在/dev目录下产生相应UART设备节点。以高通mdm9x07为例:

    这里写图片描述

    系统启动之后在/dev下有两个ttyHSL设备节点:ttyHSL0、ttyHSL1。

    $ cat /proc/tty/driver/msm_serial_hsl

    输入该命令可以显示设备节点详细信息,其中通过地址(0x078B3000)与data sheet对比即可确认UART1对应的设备节点为/dev/ttyHSL1。
    同时通过who命令可查看当前终端tty信息。

    $ who
    root ttyHSL0 00:00 Jan 6 00:02:00

    发现/dev/ttyHSL0为调试串口。
    如果UART设备节点未产生,可在其相应驱动程序xx_probe函数中添加打印,查看xx_probe函数是否被调用,进一步查找原因。

    软件回环测试

    如果成功产生了UART设备节点,可通过软件回环测试确认UART驱动程序功能是否正常。测试步骤:

    这里写图片描述

    进入loopback文件所在目录:

    $ cd /sys/kernel/debug/msm_serial_hsl

    将loopback.1值设置为1,打开UART1回环测试。

    $ echo 1 > loopback.1

    回环测试程序代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include<unistd.h>
    #include<termios.h>
    #include<string.h>
    
    int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
    {
        struct termios newtio,oldtio;
        if( tcgetattr( fd,&oldtio)  !=  0) {
            perror("tcgetattr error");
            return -1;
        }
        bzero( &newtio, sizeof( newtio ) );
        newtio.c_cflag  |=  CLOCAL | CREAD; 
        newtio.c_cflag &= ~CSIZE; 
    
        switch( nBits )
        {
            case 7:
                newtio.c_cflag |= CS7;
                break;
            case 8:
                newtio.c_cflag |= CS8;
                break;
        }
    
        switch( nEvent )
        {
            case 'O':
                newtio.c_cflag |= PARENB; 
                newtio.c_cflag |= PARODD;  
                newtio.c_iflag |= (INPCK | ISTRIP); 
                break;
            case 'E':
                newtio.c_iflag |= (INPCK | ISTRIP);
                newtio.c_cflag |= PARENB;
                newtio.c_cflag &= ~PARODD;
                break;
            case 'N': 
                newtio.c_cflag &= ~PARENB;
                break;
        }
    
        switch( nSpeed )
        {
            case 2400:
                cfsetispeed(&newtio, B2400);
                cfsetospeed(&newtio, B2400);
                break;
            case 4800:
                cfsetispeed(&newtio, B4800);
                cfsetospeed(&newtio, B4800);
                break;
            case 9600:
                cfsetispeed(&newtio, B9600);
                cfsetospeed(&newtio, B9600);
                break;
            case 115200:
                cfsetispeed(&newtio, B115200);
                cfsetospeed(&newtio, B115200);
                break;
            case 460800:
                cfsetispeed(&newtio, B460800);
                cfsetospeed(&newtio, B460800);
                break;
            default:
                cfsetispeed(&newtio, B9600);
                cfsetospeed(&newtio, B9600);
                break;
        }
    
        if( nStop == 1){
            newtio.c_cflag &=  ~CSTOPB; 
        }else if ( nStop == 2 ){
            newtio.c_cflag |=  CSTOPB;
        } 
        newtio.c_cc[VTIME]  = 0;
        newtio.c_cc[VMIN] = 0;
        tcflush(fd,TCIFLUSH); 
        if((tcsetattr(fd,TCSANOW,&newtio))!=0)
        {
            perror("set error");
            return -1;
        }
        return 0;
    }
    
    int main(int argc,char *argv[])
    {
        int fd,ret_set,ret_read,ret;
        char buf_read[100];
        char tty[20]="/dev/";
        if(4 == argc)
        {
            strcat(tty,argv[1]);
            fd = open(tty, O_RDWR);
            if(fd == -1)
            {
                printf("Open %s failed! Exit!\n",tty);
                exit(1);
            }
            printf("open %s successfully!\n",tty);
    
            ret_set = set_opt(fd, atoi(argv[2]), 8, 'N', 1);
            if (ret_set == -1)
            {
                printf("Set %s failed! Exit!\n",tty);
                exit(1);
            }
            printf("Set %s successfully!\n",tty);
            printf("Baud rate: %s\n",argv[2]);  
            printf("Data: %s\n",argv[3]);       
            while (1)
            { 
                memset(buf_read, 0, sizeof(buf_read));
                ret = write(fd, argv[3], 100);
                if( ret > 0){
                    printf("Write data: %s\n",argv[3]);
                }else{
                    printf("Write data failed! Exit!\n");
                    exit(1);
                }
                ret_read = read(fd, buf_read, 100);
                if(ret_read > 0){
                    printf("Read data: %s\n\n", buf_read);
                }
                sleep(3);
            }
                close(fd);
        }else{
            printf("Usage: uart [tty node] [baud rate] [data]\n");
            printf("       Sample: uart ttyHSL1 115200 test\n");
        }
     return 0;
    }
    

    测试程序github地址:https://github.com/IOT-er/uart

    交叉编译得到执行文件uart:

    $ arm-linux-gcc -g uart.c -o uart

    运行uart进行回环测试:
    这里写图片描述
    可以看到UART1成功收到了发送的 hello字符。

    管脚信号测试

    软件回环测试通过之后,将UART1的RX、TX管脚短接,关闭软件回环,使用uart程序进行自收发测试。
    关闭软件回环:

    $ echo 0 > loopback.1

    此时有可能出现的问题是TX管脚无信号输出,确认硬件线路无误后最可能的原因是TX管脚被其他功能占用。
    如果管脚信号测试通过,则串口功能基本调试成功。此方法的优点是无需上位机串口助手的配合,在串口模块到位之前提前完成接口调试工作。

    展开全文
  • USB转UART接口模块采用专用的USB转UART接口芯片,输出为TTL电平,可以和单片机的内置串口(UART)直接连接,使单片机通过USB口和计算机通讯,方便、快捷。 UART,是一种异步收发传输器,是电脑硬件的一部分。将资料由...
  • CH438 是八 UART 芯片,包含八个兼容 16C550 或者 16C750 的异步串口,支持最高 4Mbps 的通讯 波特率,可以用于单片机/嵌入式系统的 RS232 串口扩展、带自动硬件速率控制的高速串口、RS485 通讯等CH438 芯片内部具有...
  •  UART接口 UART是UniversalAsynchronousReceiver/Transmitter的缩写,翻译成中文就是“通用异步收发传输器”,顾名思义,这是一个异步收发信息的接口,通常用于芯片与外部设备通信连接。uart是单bit传输接口,因.....
  • 高美迪亚 C1068 JPEG压缩w/UART接口模块用户手册pdf,高美迪亚 C1068 JPEG压缩w/UART接口模块用户手册
  • ARM开发 UART接口

    2009-08-12 17:54:06
    基于Arm S3c2410的uart接口开发和LED显示测试示例
  • 认识UART接口嵌入式里面说的串口,一般是指UART口, 但是我们经常搞不清楚它和COM口的区别, 以及RS232, TTL等关系, 实际上UART,COM指的物理接口形式(硬件), 而TTL、RS-232是指的电平标准(电信号)。UART有4个pin...
  • 【原创】FPGA开发手记(一) UART接口-附件资源
  • UART系列文章先介绍UART的规范,然后自己动手写Verilog代码实现这个接口并进行测试,最后介绍Xilinx的AXI-uartlite IP核。本系列文章分节较多。 一、UART简介 UART是FPGA工程师在工作中会用到的最常见的接口之一。...
  • UART接口代码

    2018-08-24 23:17:11
    uart串口上位机串口调试助手代码,包括tx模块,rx模块,波特率选择模块,串口调试助手发送数据到rx,rx将数据发送给tx。实现串口通信
  • 芯片内部高度集成了模拟调制解调电路,只需少量的外围电路就可以工作,同时支持I2C接口,UART接口,SPI接口,数字电路具有TTL、CMOS两种电压工作模式。具有宽电压工作范围。特别适用于ISO14443标准下水、电、煤气表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,384
精华内容 1,753
关键字:

uart接口