Reading/Writing To A Device on SMBus in Windows XP Embedded

M

Mike

I've seen several posting with answers related to this, but none with
an answer so I want to try asking it a different way.

I have a system running Windows XP Embedded. On it's SMBus there is a
chip which controls the brightness and contrast of the LCD panel hooked
into the LVDS. The problem is that the manufacturer of my board does
not supply an API for my board to read and write to the SMBus.

So, does anyone know what I have to do to be able to read and write
(single bytes only) to this device on the SMBus?

I have the SMBus Device Driver external architecture specification from
Intel, but can't seem to get any of the examples in it to compile,
despite hours of trying. I've also searched and searched for example or
other information that would help but to no avail. My board has an
Intel 82801DB/DBM SMBus Controller driver installed (hence why I was
trying to use the specification from Intel, et al). Can anyone help me
figure out what I'm doing wrong or where I can find information on
reading from/writing to the SMBus?

Thanks,
Mike
 
N

No Never

Hello Mike,

Windows does not like direct access to hardware.
There's a "Ring0" called level drivers run in with access
and a user mode level for normal applications.
Basically there are two ways to reach the SMBus Controller (AFAIK):
1.) Use a program which grands your special application access to a part of
the hardware.
(See "UserPort" or go to http://www.beyondlogic.org/porttalk/porttalk.htm)
Then you are able to directly access the port the SMBus Controller is on.
2.) Get the DDK from Microsoft. Unfortunately I lost the link but inbetween
there was a
free download possibility (search this group).
(By digging around you will find out that 1. is slightly slower if you have
intensive accesses)
If you've an old W83627 chip on your motherboard (incorporating the
temerature sensors)
there are some examples how to access this chip. These can be easyly
modified to access
the SMBus Controller.

Good luck, Wolfgang
 
N

Nikolai Vorontsov

Windows does not like direct access to hardware.
There's a "Ring0" called level drivers run in with access
and a user mode level for normal applications.
Basically there are two ways to reach the SMBus Controller (AFAIK):
1.) Use a program which grands your special application access to a part of
the hardware.
(See "UserPort" or go to http://www.beyondlogic.org/porttalk/porttalk.htm)
Then you are able to directly access the port the SMBus Controller is on.
2.) Get the DDK from Microsoft. Unfortunately I lost the link but inbetween
there was a
free download possibility (search this group).
(By digging around you will find out that 1. is slightly slower if you have
intensive accesses)
If you've an old W83627 chip on your motherboard (incorporating the
temerature sensors)
there are some examples how to access this chip. These can be easyly
modified to access
the SMBus Controller.
I can only confirm No Never's word: search Motherboard temperature
monitor programs with open source - there you can find what you need.
As a port io driver I can suggest GiveIO and DlPortIO - google to find them.
 
M

Mark Roddy

I've seen several posting with answers related to this, but none with
an answer so I want to try asking it a different way.

I have a system running Windows XP Embedded. On it's SMBus there is a
chip which controls the brightness and contrast of the LCD panel hooked
into the LVDS. The problem is that the manufacturer of my board does
not supply an API for my board to read and write to the SMBus.

So, does anyone know what I have to do to be able to read and write
(single bytes only) to this device on the SMBus?

The correct way is to write a simple device driver for the smbbus
device. I would suggest using the KMDF1.0 windows driver foundation as
it will minimize the amount of work you have to do. The other
suggestions to use various 'port exporting' things are ok, but they
are really not supported.
I have the SMBus Device Driver external architecture specification from
Intel, but can't seem to get any of the examples in it to compile,
despite hours of trying. I've also searched and searched for example or
other information that would help but to no avail. My board has an
Intel 82801DB/DBM SMBus Controller driver installed (hence why I was
trying to use the specification from Intel, et al). Can anyone help me
figure out what I'm doing wrong or where I can find information on
reading from/writing to the SMBus?

Thanks,
Mike


=====================
Mark Roddy DDK MVP
Windows Vista/2003/XP/2000 Consulting
Device and Filesystem Drivers
Hollis Technology Solutions 603-321-1032
www.hollistech.com
 
G

Guest

Hi all,
well, I'm also struggling with similar problem. I use some kind fancy
library to get values from ports from ring3 app. Ports are as listed in
hardware manager for SMBUS: 0xe8a0 through e8bf. I want to list devices
connected to the SMBUS. My primary goal is to get data like cpu core voltage,
system voltages, fan rpm... The target board seems to have LM93 controller at
slave address 0x2e. Could you please help me with that somehow?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top