0

我在 Parallax BASIC Stamp 板上有一个应用程序,它读取文本命令并根据命令执行测试用例。一个通过 SPI 总线发送数据并从 SPI 总线读取数据的测试用例失败,具体取决于 DEBUGIN 文本的突发速率。

Stamp Board 通过 19200 波特的串行端口连接到 PC(四核 2+ GHZ)。

当我使用 BASIC Stamp Terminal 或 Hyper Terminal 向 Stamp Board 发送命令时,测试通过。当我通过 C# 应用程序发送相同的命令时,测试失败。主要区别在于将文本发送到 Stamp Board 的突发速率。

人类发送文本的速度比计算机(应用程序)慢。使用超级终端时,以 19200 波特率发送一个字符。应用程序以 19200 波特率发送 8 个字符,字符之间没有停顿。

我正在寻找 DEBUGIN 语句(通过串行端口输入)如何影响 SHIFTIN 或 SHIFTOUT 命令的解释,或者是否有人知道如何解决此问题。

不幸的是,DEBUGIN 命令的波特率无法更改。另一种方法是使用串行端口命令以较慢的速度使用自定义版本(包括将文本转换为数字)(这会使用额外的宝贵空间,这在我的项目中很少)。

如果发布到 StackEchange 是错误的论坛,请迁移并发布迁移的原因。

4

1 回答 1

2

听起来微控制器端没有设置好为 UART 和 SPI 外围设备提供服务,因此后续字符在 UART 上的到达太快要么导致 SPI 无法服务,要么可能导致UART上的一些字符被遗漏。

稳健的解决方案是了解问题并在微控制器代码的体系结构中修复它。例如,您可能需要使用中断并让中断服务例程在较长的软件管理的 fifo 和外围硬件中通常为 1 或 2 深的 fifo 之间移动字符。

一个可能可行但风险更大的解决方案是让您的 C# 应用程序在它发送的字符之间插入延迟,以利用人类速度打字的明显工作。这个主题的一个变体是让嵌入式设备回显字符,并让 C# 程序在发送下一个字符之前等待每个字符的回显(您还需要一个转义字符来清除嵌入式命令缓冲区并重新开始,如果C# 程序决定声明嵌入式设备超时并重新开始)

另一个想法是缩短必须发送的数据。嵌入式系统的人类可读命令语言很棒,因为正如您所注意到的,您可以使用终端应用程序来使用它们。但是,如果嵌入式系统受到极大限制,则使用打包的二进制或十六进制格式可以使其更易于解析。最简单的情况是单字符命令的执行中间有暂停的极端情况(如果您主要使用字母数字,则可以重新使用终端程序)

于 2011-02-24T05:18:09.597 回答