开源改变世界

USB 通信读/写 #116

推推 grbl 3年前 (2023-01-21) 111次浏览

关闭
Highlander01 开启了这个问题 2012 年 9 月 3 日 · 3条评论
关闭

USB 通信读/写#116

Highlander01 开启了这个问题 2012 年 9 月 3 日 · 3条评论

注释

USB 通信读/写 #116

我一直在使用不同的 Arduino 的 Mega Revs 和这个代码。他们在usb读写方面遇到了一些挑战。这段代码中的 prints usb / read write 似乎很特别。为什么不使用简单的标准打印读写代码。

USB 通信读/写 #116
成员

串行模块应该相当简单,但代码没有直接从标准 arduino 库中提取的原因是,在编写 Grbl 时,代码在发送时被阻塞,这意味着大量处理周期被浪费在等待 IO 上, Grbl 真的负担不起。据我所知,这可能现在已经改变了——而且标准的 arduino 库是 C++,而 Grbl 是严格的 C,所以它不能直接应用。

如果有人可以阅读标准 Arduino 库的更新并查看是否有任何线索可以使 Grbl 在新的 Arduino 修订版上使用串行接口更稳健地工作,这将非常有帮助。

USB 通信读/写 #116

当前的 Arduino IDE (1.0.1) 和附带的库使用环形缓冲区来处理 USART。它是 C++ 并且是一个丑陋的文件(带有剩余的注释和所有您不希望在公开发布的软件的生产质量源中找到的东西),但它可以工作。
接收端要么从缓冲区返回一个字符,要么在没有可用的情况下返回 -1(API 有一个函数可以告诉您是否有任何内容要读取,因此在正常使用中您永远不会从接收方获得 -1 ).
传输端会将字符存储到缓冲区中,如果缓冲区已满则返回或阻塞——IIRC,这是 grbl 代码的当前行为,所以这里没有区别。

现在,如果 OP 给出实际问题的实际示例以便可以执行正确的调试,这将非常有帮助,但是在他的帖子中看到关键字“USB”我有几点要说:

  • Uno 和 Mega 2560 上的方式是:ATmega328P -> 引脚数字 0 和数字 1(PD0,PD1) -> 串行到 USB 芯片(FTDI 或 ATmega16U2) -> USB 电缆到计算机
  • Leonardo 上的方式是:ATmega32U4 -> USB 线到电脑

Grbl 有通过 USART0 与外界对话的代码。如果上传到较新的 Leonardo,它将无法与计算机通信,因为 PD0、PD1 不再连接到任何 USB 到 RS232 适配器(和 Arduino 库,当在 Leonardo 上运行时,不要使用USART0 而是通过 USB 创建 CDC 接口,将其呈现给计算机并通过它从用户代码重定向串行活动)。

可以在 Teacup 固件中找到如何在非 Arduino 代码中处理该问题的示例,该固件在为支持 USB 的 MCU 编译时使用 LUFA。

希望这能说明手头的问题。

USB 通信读/写 #116
成员

极好的,@csdexter. 谢谢!

喜欢 (0)