Здравствуйте, santos, Вы писали:
S>Кто нибудь знает каким образом просканить SMBus?? Может кто делал уже подобную программу или драйвер??
Вот, писал когда то на Delphi. Я думаю разберетесь. Если будут вопросы. Пишите...
а у нас есть спец таг pascal для такого кода

— модератор
function smbWaitForFree(BaseAddr: word) : boolean;
procedure smbWaitForEnd(BaseAddr: word);
function smbCallBus(BaseAddr: word; CMD: byte; Slave: byte; RW: byte): cardinal;
function smbGetReg(BaseAddr: word; Reg: byte; Slave: byte): word;
procedure smbSetReg(BaseAddr: word; Reg: byte; Chip_Add: byte; Data: byte);
function smbWaitForFree(BaseAddr: word) : boolean;
var
StartTick,
Status : DWORD;
begin
Result:=False;
InPort(BaseAddr,@Status,PORT_BYTE);
StartTick:=GetTickCount;
while (Status and 1)<>0 do begin
InPort(BaseAddr,@Status,PORT_BYTE);
if GetTickCount>StartTick+2000 then
exit;
end;
if (Status and $1e)<>0 then
OutPort(BaseAddr,Status,PORT_BYTE);
Result:=True;
end;
procedure smbWaitForEnd(BaseAddr: word);
var
Status : DWORD;
begin
InPort(BaseAddr,@Status,PORT_BYTE);
while (Status and 1)=1 do
InPort(BAseAddr,@Status,PORT_BYTE);
end;
function smbCallBus(BaseAddr: word; CMD: byte; Slave: byte; RW: byte): cardinal;
var
Dump1,
Dump2 : word;
begin
smbWaitForFree(BaseAddr);
OutPort(BaseAddr+3,CMD,PORT_BYTE);
OutPort(BaseAddr+4,(Slave shl 1) or RW,PORT_BYTE);
OutPort(BaseAddr+2,$48,PORT_BYTE);
sleep(1);
smbWaitForEnd(BaseAddr);
InPort(BaseAddr+6,@Dump1,PORT_WORD);
Dump1:=Dump1 shl 8;
InPort(BaseAddr+5,@Dump2,PORT_WORD);
Result:=Dump1 or Dump2;
end;
function smbGetReg(BaseAddr: word; Reg: byte; Slave: byte): word;
var
Data : cardinal;
begin
smbWaitForFree(BaseAddr);
OutPort(BaseAddr+5,0,PORT_BYTE);
OutPort(BaseAddr+6,0,PORT_BYTE);
Data:=smbCallBus(BaseAddr,Reg,Slave,1);
Result:=(Data and $ff);
end;
procedure smbSetReg(BaseAddr: word; Reg: byte; Chip_Add: byte; Data: byte);
begin
smbWaitForFree(BaseAddr);
OutPort(BaseAddr+5,Data,PORT_BYTE);
OutPort(BaseAddr+6,Data,PORT_BYTE);
smbCallBus(BaseAddr,Reg,Chip_Add,0);
end;
... << RSDN@Home 1.1.4 stable rev. 510>>