我为Raspberry Pi改编from this book实现了1-wire协议。它使用bit banging来实现通信协议。来自BCM2835库的函数bcm2835_delayMicroseconds()用于产生所需的延迟。
效果很好,但不完全可靠:有时我没有得到传感器的响应。我用示波器来追踪问题。 这里的示波器屏幕截图以绿色信号解释。 红色标志着故障:开始低脉冲的位被延长,因此插入一个流氓'0'。这导致传感器无法识别命令而不响应它(后续的'1'。
我相信这一事,因为在传输此位期间OS已抢占(切换到另一个任务/线程/进程)。所以 是否可以告诉Linux在执行某个功能时不要抢占(在这种情况下写入和读取单个位)?或许这个问题还有另一个解决方案吗?