提问人:Nate 提问时间:9/29/2012 最后编辑:MikeNate 更新时间:2/22/2021 访问量:43231
是时候发送 32KB 超过 9600 波特串行了吗?
Time to send 32KB over 9600 baud serial?
问:
我想知道我在这里的数学是否正确。如果我的波特率是 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
这是对的吗?
答:
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在整个传输过程中保持数据馈送 - 这在这样的低数据速率下通常不会成为问题。
评论