TTL串行如何工作?


15

我一直在尝试寻找TTL串行“标准”的良好描述,但运气不佳。我了解串行发送(TX)和接收(RX)线处于高电平空闲状态(在VCC处),并且当发送一位时它们会掉到地上。因此,它们与规范相反,“ 1”为高,“ 0”为低。

我不明白是谁负责保持高电平以及如何传输零。发送者是否将线路驱动到高电平和低电平?还是接收器将线拉高,发送器将线拉低(集电极开路)?


阅读Joby的答案;显然我以为我知道的一切都被颠倒了。:-)
blalor

真正的RS232与0 = 12v,1 = -12v相反,这就是它令人困惑的原因
Toby Jaffey 2010年

2
术语点:“ TTL串行”是一个严重的过时术语,“(点对点)异步串行(在TTL级别)”似乎是您要问的。(尽管仍然可能缺少,但至少更好)
Nick T

3
@Nick OP的意思是将其馈入MAX232,我称之为“ TTL电平的RS232”
Toby Jaffey 2010年

2
@Joby-如果他仅使用Tx和Rx,并且您还删除了它的级别,那么就再也没有RS232了!称为UART。
2012年

Answers:


17

对于TTL串行,有两条单向数据线。每个都由发送者驱动,高低都驱动。0位用0V表示,1位用VCC表示。

接收器的引脚应设置为输入。

因此,对于微控制器发送一个字节(8-N-1无流控制),它可以执行以下操作:

#define BAUDRATE 9600
#define DELAY (SYS_CLK/BAUDRATE)

#define UART_BITBANG_OFF     UART_BITBANG_PORT |= _BV(UART_BITBANG_PIN)
#define UART_BITBANG_ON      UART_BITBANG_PORT &= ~ _BV(UART_BITBANG_PIN)

#define UART_BITBANG_BIT(bit) {if (bit) UART_BITBANG_ON; else UART_BITBANG_OFF; _delay_us(DELAY);}

void uart_bitbang_init(void)
{
    UART_BITBANG_DDR &= ~ _BV(UART_BITBANG_PIN);        // TX output
}

void uart_bitbang_putc(uint8_t c)
{
    UART_BITBANG_BIT(1)
    UART_BITBANG_BIT((c & 0x1) == 0);
    UART_BITBANG_BIT((c & 0x2) == 0);
    UART_BITBANG_BIT((c & 0x4) == 0);
    UART_BITBANG_BIT((c & 0x8) == 0);
    UART_BITBANG_BIT((c & 0x10) == 0);
    UART_BITBANG_BIT((c & 0x20) == 0);
    UART_BITBANG_BIT((c & 0x40) == 0);
    UART_BITBANG_BIT((c & 0x80) == 0);
    UART_BITBANG_BIT(0);
}

(此代码向后读取,因为它原本是用于反向TTL串行的)

当然,大多数MCU都有硬件UART,可以为您完成所有这些工作。

这是您在示波器上看到的内容:

https://www.pololu.com/docs/0J25/4.a

这是来自ladyada的一段精彩的视频,解释了连续剧:http : //www.adafruit.com/blog/2010/09/15/usb-serial-and-you-video-an-adafruit-after-school-special/


谢谢,乔比。因此,即使线路闲置为高电平,0位仍为0v。接收器通常在RX线路上具有内部上拉,从而不会浮空吗?
blalor

@blalor线路不会浮动,发送方正在驱动它(假设两端都已连接)
Toby Jaffey 2010年

Arduino的NewSoftSerial在RX引脚上启用AVR的内部上拉。如果没有附加的发件人,我认为这必需的。感谢您提供的信息以及添加的Adafruit链接。
blalor

1
有点古怪,但是“ TTL”不只是暗示水平吗?您描述了点对点串行链接,但是它是否也可以是具有集电极开路驱动器和上拉电阻(如LIN但具有TTL电平)的多主机拓扑?“ TTL串行”似乎是一个难以置信的广义术语,没有上下文就几乎没有用。
尼克T

1
它只是去除了电压转换器的标准串行端口接口。
starblue 2010年

8

您不会说太多话,但是“ idle high”表示您的意思是UART。UART 与线收发器进行点对点连接,例如无处不在但过时的MAX232(如今有更好的解决方案)。微控制器和收发器之间的线路也将很短。如果要桥接的距离将在收发器之间。
控制器的输出为推挽式。

在此处输入图片说明

P-MOSFET将提供高电平,N-MOSFET将提供低电平。其中之一必须是活动的,否则线路电平将浮动并且未定义(或由收发器中的负载定义)。两者都能够产生/吸收一定的电流,并将线路拉至电源轨,因此信号形状几乎是理想的。
如果确实是TTL,那将是不同的,如您所问(微控制器为HCMOS)。TTL输出高度不对称:它们只能提供很少的电流,通常为0.4mA。吸收电流正常,为8mA。如果线路具有高电容和高速度,则低电源电流可能会成为问题。低驱动电流意味着电容只会相对缓慢地充电,而上升沿将很慢,这可能会导致严重的信号失真。TTL从未用于此目的。

您的问题还可能涉及多点线路,其中有多个设备可以通话。在那种情况下,您将无法使用推挽输出:如果一个设备将线路驱动为高电平,而另一设备将线路驱动为低电平,则我们将发生短路。多点线路几乎总是使用上拉电阻来保持线路空闲为高。然后,只有低电平需要驱动线路,而不仅仅是推挽输出,我们只有N-MOSFET会有漏极开路。现在,该线路也被非对称驱动:上拉电阻只能提供很少的电流,而下拉FET可以将线路快速接地。因此,高速多点线路限制了上拉电阻。I2C就是一个例子。


“随处可见但过时的MAX232(当今有更好的解决方案)”您能举一些例子吗?
m.Alin

3
@ m.Alin- Maxim说:“尽管多年来单电源设备已经得到了很大的改进,但许多电路板设计人员仍在使用MAX232。” 收发器列表
stevenvh 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.