адреса smbus хрен где найдешь. если только в линуксе рыть. их даже в документации на ТВ тюнер нент. PCI там описано. А вся работа идет через smbus. А в доках их нет.
abcd008 Даташиты к устройствам не так просто достать. На Intel'овские поделки можно отыскать в нете даташиты, а всё остально не просто. Даже тот самый SPD памяти приходится читать 4-мя разными способами (для каждого вендора чем то и отличается). А вообще не понятно зачем знать "специфичные" адреса smbus.
с первым согласен, но не совсем. intel досихпор не открыла доки на usb 3.0 (xHCI). они доступны только избранным. А адреса smbus нужны не все а стандартные. нсколько я помню адреса 0-127 стандартизированы и постоянны.
народ подскажите такую вешь. я считал тайминги из spd памяти, а как мне установить эти тайминги. куда их надо писать. или при записи в spd они автоматом меняются??? заранее спасибо.
тайминги надо записать в спд, если не ошибаюсь и при загрузке биоса он их оттуда считает и установит.
drem1lin Насколько помню из SPD биос читает 3 байта чтобы определить размер памяти. Тайминги железо выбирает само. Также если в биосе выброно ручное управление то настройки выставляются те что выбрал пользователь. В последних биосах появилась настройка загружать тайминги из SPD, но по умолчанию она отключена. Записать аналогична чтению там разницы почти никакой.
а куда биос их записывает. ведь в спд апосто информация а частоту надо задовать в контроллере, но как?
В соответствующие регистры контроллера памяти записывается, есно. А в какие именно и как именно, зависит от особенностей этого самого контроллера.
Очень нужна помощь в определении мультика ADM1031 и получении посредством его температуры железа. Накрапал нижеследующий код, но ни хрена не детектится и AX перед сравнением в нулях вместо 0x4130. 0x2E - address port 0x2F - data port 0x3D - chip ID register 0x3E - manufacturer ID register Код (Text): xor cl, cl // sio enter mov al, $55 out 0x2E, al // detect mov al, 0x3E out 0x2E, al in al, 0x2F mov ah, al mov al, 0x3D out 0x2E, al in al, 0x2F and al, 0xFE cmp ax, 0x4130 jne exit inc cl exit: call SioExit mov al, cl Подозреваю, что в части детекта использую не те "address" и "data" порты. Исходники "lm-sensors" курил, но чё-то не фкурил. В файле "sensors-detect" присутствуют функции: Код (Text): sub adm1031_detect { my ($file, $addr, $chip) = @_; my $mid = i2c_smbus_read_byte_data($file, 0x3e); my $cid = i2c_smbus_read_byte_data($file, 0x3d); ... } sub i2c_smbus_read_byte_data { my ($file, $command, $nocache) = @_; my @data; return $i2c_byte_cache[$command] if !$nocache && exists $i2c_byte_cache[$command]; i2c_smbus_access($file, SMBUS_READ, $command, SMBUS_BYTE_DATA, \@data) or return -1; return ($i2c_byte_cache[$command] = $data[0]); } sub i2c_smbus_access { my ($file, $read_write, $command, $size, $data) = @_; my $data_array = pack("C32", @$data); my $ioctl_data = pack("C2x2Ip", $read_write, $command, $size, $data_array); ioctl($file, IOCTL_I2C_SMBUS, $ioctl_data) or return 0; @{$_[4]} = unpack("C32", $data_array); return 1; } Как видно, в итоге всё сводится к вызову сишной функции "ioctl", но я не вижу во всём этом коде в какой порт надо пихать адреса внутренних регистров чипа и из какого считывать значения. Ткните носом пожалуйста.