首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式Linux设备启动时阻塞RS485总线

嵌入式Linux设备启动时阻塞RS485总线
EN

Stack Overflow用户
提问于 2016-04-04 07:24:02
回答 3查看 531关注 0票数 4

我在使用一台工业Linux计算机时遇到了麻烦,我正在用多个连接的设备在RS485总线上实现通信。我所遇到的是,RS485 USART驱动程序使用的IO引脚在启动时被设置为不同的级别,而不是进入RS485空闲/三状态。因此,当设备启动时,总线上的其他设备被阻塞超过30秒,引发各种外部问题。事件的过程可以在附图中看到,在这里,我用示波器测量了启动期间的输出电压。

我的猜测是,实际的驱动器是不会启动的,直到电压水平达到他们的三态水平(例如,这个设备的~2.2V )。在那之后,一切都如期而至。

我试图在引导时找到任何配置文件来设置引脚的默认IO级别(认为这可能是由引导加载程序设置的),但没有效果。

此外,我还尝试应用一个启动脚本来运行“足够早”来设置数据,但据我所知,这个设备并没有提供任何接口来控制这些引脚。

任何帮助,提示或见解将是非常感谢的!

编辑:我不是一个经验丰富的Linux开发人员,所以如果我遗漏了任何重要的细节,请强调一下。

一些规范:

  • ARM920T rev 0 (v41) CPU
  • Linux2.6的专有发行版
  • 使用Busybox
  • Atmel USART司机

从引导日志提取的

Linux版本2.6.28.10 (root@) (gcc版本4.1.2) #94 PREEMPT 10月29日10:22:19 CET 2013

CPU: ARM920T 41129200修订版0 (ARMv4T),cr=c0003177

/...

...

启用/dev/ttyS3端口的RS485模式

/...

..。(我猜大约30秒过去了)

...

atmel_usart.3: ttyS3 at MMIO0xfffcc000 (irq = 9)是一个ATMEL_SERIAL

atmel_serial.3:放下RS485 RTS引脚

/...

..。

...

完全引导日志: https://drive.google.com/file/d/0B2XYl1mNCa8jNUZ5V0Nic1hkU0U/view

类似问题:

这里可能会讨论一个类似的问题:UART initialisation: Prevent UART to pull RTS high

但我不知道如何执行建议的解决方案。

EN

回答 3

Stack Overflow用户

发布于 2016-04-04 12:22:47

这不过是胡思乱想,但可能值得在启动过程中尽早向设备添加一个空字符的启动脚本(例如/dev/ttyS1或其他什么)。这可能足以启动驱动程序初始化硬件。

您还可以尝试在Linux源代码中找到驱动程序,查看它是如何启动的。

票数 1
EN

Stack Overflow用户

发布于 2016-04-06 19:02:21

可能您可以访问源代码,这样您就可以调查是谁和什么时候处理了那个GPIO。只需grep,atmel gpio控制器端口地址的内核源代码,就可以知道发生了什么。如果幸运的话,可能会有内核命令行选项,您可以通过引导加载程序将行预先设置为所需。

票数 1
EN

Stack Overflow用户

发布于 2016-04-07 11:57:22

这个答案可能会奏效,如果你能找到你的董事会下面提到的所需的东西!

有一次,我在PWM上也有过同样的问题。在那里,我发现我的引导加载程序也负责同样的工作,我改变了引导加载器的配置,并且它开始正常工作。

检查您的BSP由板供应商或第三方提供(如果您有源代码),如果您的引导加载程序是U引导,您可以在U-boot-(source)/include/configs/(your-board).h中找到它,您可以找到RS484的配置。根据板的数据表,您可以检查在同一引脚上被屏蔽的其他东西,如果启动时间不需要,则禁用这些东西,并启用RS485。

enabling/disabling可以通过根据您的配置更改值0, 1 or 2来完成,您也可以只需将//注释到行外就可以禁用任何内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36396722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档