是时候发送 32KB 超过 9600 波特串行了吗?

Time to send 32KB over 9600 baud serial?

提问人:Nate 提问时间:9/29/2012 最后编辑:MikeNate 更新时间:2/22/2021 访问量:43231

问:

我想知道我在这里的数学是否正确。如果我的波特率是 9600,那么这意味着每秒发送 9600 位,对吧?如果是这样,那么:

9600 bit/sec <=> 1000 ms/ 9600 bit = 0.1042 ms/bit

因此,发送 32KB 应该需要:

32,000*(8+2) bits = 320,000 bits -- (8+2) because 8 data bits + 1 start bit + 1 stop bit
320,000 bits*0.1042 ms/bit = 33344 ms = 33.344 sec

这是对的吗?

嵌入式 串行端口 波特率

评论

2赞 Hans Passant 9/29/2012
32KB = 32 * 1024 = 32768 字节。除此之外,假设没有握手延迟或发射器落后于驾驶员,是的。
5赞 sawdust 9/29/2012
您的问题不完整,因为您只指定了“串行”连接。串行连接可以是同步的,也可以是异步的。更常见的“串行”连接当然是 EIA-232(又名 RS-232)异步连接。对于异步串行连接,波特率仅指定字符帧中位的比特率asynchronous 属性表示未指定字符帧之间的时序。因此,通过异步串行连接的“发送时间”只能得出一个最短的时间,并且在最大时间上是无限制的。
3赞 Ian Clelland 10/2/2012
从技术上讲,波特率指定了每秒的符号数;而不是比特。如果我没记错的话,电话线调制解调器的峰值为 9600 波特,但通过对每个符号编码更多位,我们能够实现 14.4kbps 到 57.6kbps。否则,我认为你的数学是正确的,忽略了任何其他因素,如纠错。
0赞 ulidtko 3/12/2020
对于所有的传统主义者来说,在哪些情况下“公斤”意味着 1024,其中 1000:已经停止了。请。Kilo 表示 1000×。Kibi 的意思是 1024×。时期。

答:

8赞 makapuf 9/29/2012 #1

如果您需要粗略检查幅度(无论是 3 秒还是 30 秒还是 300 秒),请记住 9600 kbps ~ 1KB/秒(如果您有 2 个额外的奇偶校验/停止位,则为 10 位),因此 32KB -> 大约 32 秒。

评论

0赞 Clifford 9/29/2012
对于一个近似值来说足够公平,但问题将时间陈述到小数点后三位;所以也许需要的不仅仅是近似值?
0赞 mvermand 1/18/2017
所以你可以说每个字节大约需要一毫秒,对吧?
14赞 Clifford 9/29/2012 #2

确实如此,但是通过将位宽的似值相乘,您已经失去了精度,因此将时间指定为小数点后三位是不正确的。

为避免精度损失,请勿使用舍入的中间表达式,而应使用:

bytes x bits_per_character / bits_per_second

因此,就您而言:

32000 x 10 / 9600 = 33.333(recurring) seconds.

然而,传统上 32Kb 是指 32 x 1024 字节,因此在这种情况下:

32 x 1024 x 10 / 9600 = 34.1333(recurring) seconds.

评论

1赞 sawdust 9/30/2012
六个有效数字的答案是没有根据的,因为正确答案需要在值前面加上“至少”一词。您不能规定或假设每个字符帧之间的死区时间绝对为零。顺便说一句,“32Kb 指的是 32 x 1024 字节”应该是“Kb”中的大写字母“B”。
0赞 Clifford 9/30/2012
@sawdust:如果您真的认为 Kb 很重要或更清晰,请随时编辑它!关于字符间距,这当然是有效的。但人们可能会认为,如果这种计算很重要,那么设计将确保UART在整个传输过程中保持数据馈送 - 这在这样的低数据速率下通常不会成为问题。