【问题标题】:Time to send 32KB over 9600 baud serial?是时候通过 9600 波特串行发送 32KB 了?
【发布时间】:2012-09-28 21:52:15
【问题描述】:

我想知道我的数学是否正确。如果我的波特率为 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

对吗?

【问题讨论】:

  • 32KB = 32 * 1024 = 32768 字节。除此之外,假设没有握手延迟或发射器落后于驱动程序,是的。
  • 您的问题不完整,因为您只指定了“串行”连接。串行连接可以是同步的或异步的。更常见的“串行”连接当然是 EIA-232(又名 RS-232)异步。对于异步串行连接,波特率仅指定字符帧中位的比特率asynchronous 属性意味着字符帧之间的时间是未指定的。因此,通过异步串行连接的“发送时间”只能得出最短时间,而最长时间是无限的。
  • 从技术上讲,波特率指定每秒符号的数量;而不是比特。如果我没记错的话,电话线调制解调器的峰值为 9600 波特,但通过对每个符号编码更多位,我们能够达到 14.4kbps 到 57.6kbps。否则,我认为你的数学是正确的,忽略纠错等任何其他因素。
  • 对于所有的传统主义者来说,在什么情况下“kilo”意味着1024,其中1000意味着:停止这个。请。 Kilo 表示 1000 倍。 Kibi的意思是1024×。 Period.

标签: embedded serial-port baud-rate


【解决方案1】:

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

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

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.

【讨论】:

  • 六位有效数字的答案是没有根据的,因为正确的答案需要在值前面加上“至少”字样。您不能规定或假设每个字符帧之间的死区时间绝对为零。 BTW “32Kb 指的是 32 x 1024 字节” 应该是“Kb”中的大写“B”。
  • @sawdust:如果您真的认为它非常重要或更清晰,请随意编辑 Kb!关于字符间距,这当然是有效的。但人们可能会假设,如果这个计算很重要,那么设计将确保 UART 在整个传输过程中保持数据传输——这在像这样的低数据速率下通常不会成为问题。
【解决方案2】:

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

【讨论】:

  • 对于近似值来说足够公平,但问题将时间说明为小数点后三位;所以可能需要的不仅仅是一个近似值?
  • 所以你可以说每个字节大约需要一毫秒,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多