内核驱动程序 ds2490

支持的芯片

  • 基于 Maxim DS2490

作者:Evgeniy Polyakov <johnpol@2ka.mipt.ru>

描述

Maxim/Dallas Semiconductor DS2490 是一款芯片,可用于构建 USB <-> W1 网桥。

DS9490(R) 是一种 USB <-> W1 总线主设备,它包含 0x81 系列 ID 集成芯片和 DS2490 低级操作芯片。

注意事项和限制。

  • 弱上拉电流最小为 0.9mA,最大为 6.0mA。

  • 支持 5V 强上拉,最小电流为 5.9mA,最大电流为 30.4 mA。(摘自 DS2490.pdf)

  • 硬件将在下一次总线(复位?)操作时检测到设备连接到总线,但只会打印一条消息,因为核心 w1 代码未使用该信息。连接一个设备通常会产生多个新设备通知。

  • 如果将 w1_reset_send 添加到 API 中,可以减少 USB 总线事务的数量。该名称仅为建议。它将把写入缓冲区和读取缓冲区(以及大小)作为参数。ds2490 块 I/O 命令支持复位、写入缓冲区、读取缓冲区和强上拉,所有这些都在一个命令中完成,而不是当前的 1 个复位总线、2 个写入匹配 ROM 命令和从设备 ROM ID、3 个块写入和读取数据。写入缓冲区需要将匹配 ROM 命令和从设备 ROM ID 添加到请求的写入缓冲区的前面,这两者都是驱动程序已知的。

  • 硬件支持正常、灵活和超速总线通信速度,但目前只支持正常速度。

  • 已注册的 w1_bus_master 函数没有定义错误条件。如果在总线搜索过程中移除了 ds2490,它可能会在总线搜索完成之前产生大量的错误输出。

  • 硬件支持检测一些错误情况,例如短路、复位时异常存在以及复位时无存在,但驱动程序没有查询这些值。

  • ds2490 规范没有详细说明短批量输入读取,但我的观察是,如果请求的字节数少于可用字节数,批量读取将返回错误,并且硬件将清除整个批量输入缓冲区。可以通过读取最大缓冲区大小来避免此错误情况,缓冲区中多余的字节仅是驱动程序中的逻辑错误。代码应匹配读写以及数据大小。读写是串行化的,并且在执行读取之前,状态会验证芯片是否空闲(并且数据可用),因此不应该发生这种情况。

  • 在 x86_64 2.6.22-rc6 上运行 qemu 0.9.0,使用 OHCI 控制器,并加载 x86_64 2.6.24 UHCI 时,ds2490 在客户机中运行。在 qemu 连接 ds2490 硬件后,模块首次加载时会正常运行,但如果模块被卸载然后重新加载,大多数情况下批量输出或输入中的一个(通常是批量输入)会失败。qemu 设置了 50ms 的超时,即使状态显示数据可用,批量输入也会超时。批量输出写入会显示成功完成,但 ds2490 状态寄存器会显示写入了 0 字节。将 qemu 从 ds2490 硬件分离并重新连接会解决此问题。客户机和主机中的 usbmon 输出没有解释此问题。我猜测是 qemu 或主机操作系统中的一个错误,更有可能是主机操作系统的问题。

2008-03-06 David Fries <David@Fries.net>