阅读:2129回复:6
寻求SMBUS驱动帮助
新开发一款笔记本,BIOS不支持电池。现需要做一个类似于任务栏里的时间和声音程序,通过南桥ICH4的SMBUS读取电池的信息(读BQ2060A测量的电池信息)。那位大虾能给些帮助,万分感激!
|
|
沙发#
发布于:2004-11-03 09:30
这个基质应该是500h或5000h
ReadSMBusCFG proc uses edx, regaddr : byte mov eax, 8000fb00h mov al, regaddr mov edx, 0cf8h out dx, eax nop mov edx, 0cfch in eax, dx ret ReadSMBusCFG endp GetSMBIOBase Proc Invoke ReadSMBusCFG,20h or ax, 1 xor ax, 1 mov smbiobase, ax ret GetSMBIOBase Endp |
|
板凳#
发布于:2004-11-03 09:12
你说得比较有道理,等到硬件准备好了,我试一下。你说的获取SMBS寄存器的基址,我详细地看了一下,基址在南桥设备D31:F3偏址为20-23H的寄存器里,不知怎么访问这个寄存器SMB_BASE?谢谢!
|
|
地板#
发布于:2004-11-01 20:56
献丑了。如果BIOS不支持,很难说操作系统支持不支持。如果只针对ICH4,intel 的datasheet声明了其SMBus的BUS number,Device number,Function number,通过读取PCI配置寄存器可获取SMBus的基址,然后一切OK了。不过这样也太简单了,希望老兄有时间还是试试上面的办法。因为我没有时间试啊:)
[编辑 - 11/1/04 by boly81] |
|
地下室#
发布于:2004-11-01 20:37
你说的这些我也想知道,但是windows提供的接口好像不是给你方法初始化寄存器,而是发IOCTL CODE,我前几天才看了MS提供的battery Mini port代码,它里面读取battery信息用的是 IOCTL_SMBBATT_DATA,如果MS提到的battery驱动都装好了,用这个应该可以。我不知道怎样获取battery的DOS设备名,所以不知道怎样打开battery设备,然后向他的发命令。我建议你修改那个驱动,在驱动里创建个dos设备名,然后通过这个驱动发送 IOCTL_SMBBATT_DATA命令。不知道行不行,还请进来的高手留言指点。另,如果你这样做成功了请在这里通知我
:P |
|
5楼#
发布于:2004-11-01 17:53
很不好意思,我刚开始了解驱动方面的问题,以前只是做硬件。我看了Intel和Microsoft的相关资料,感觉比较繁琐,包括SMBUS的HOST DRIVER/CLASS DRIVER和电池的MINICLASS DRIVER/CLASS DRIVER,如果要完全弄通可能要很久。按我的理解,SMBUS总线接口已经存在(像COM口一样),只是要用VC做一个程序初始化他的一些寄存器,让他读写外设,主要的问题是怎么实现?寄存器的偏址知道了,只是其基址不大明白,VC里不知能否直接读写这些寄存器?
[编辑 - 11/1/04 by duanliuyun] |
|
6楼#
发布于:2004-11-01 14:56
如果是通过直接读写ICH4SMBus控制器的IO端口来获取attery信息那就太简单了,看看intel的datasheet就可以了,我写过读取SPD信息的。但是2k,xp下这种做法不妥。ddk里有battery mini port驱动的例子,你看一看就知道怎么做了。但是,如果你真的搞定了,请告诉我你的驱动是怎样安装的:) :D
|
|