Tôi đang cố gắng để có được OpenHardwareMonitor để đọc dữ liệu nhiệt độ trong số Winbond W83793 chip trên bo mạch chủ Supermicro X7DWA của tôi. Vấn đề là tôi không có bất kỳ kinh nghiệm lập trình cấp thấp nào và các tài liệu trực tuyến có sẵn dường như không đủ để giải thích cách truy cập nhiệt độ.Bạn có thể ghép các đầu mối sau đây để giúp tôi đọc nhiệt độ trên chip Winbond W83793 không?
Tuy nhiên, trong tháng mà tôi đã làm việc về vấn đề này, tôi đã phát hiện ra một vài giá trị và phương pháp cấp thấp có thể là chìa khóa để giải quyết vấn đề của tôi. Tôi chỉ cần tìm ra cách sử dụng chúng để có được những gì tôi muốn. Đó là nơi tôi quay sang bạn, bởi vì bạn có thể hiểu ý nghĩa của thông tin này và cách áp dụng nó, không giống như tôi. Tôi đã thực hiện phần chia sẻ công bằng của mình, tạo ra nhiều màn hình màu xanh và khởi động lại máy tính. Đủ đoán, tôi cần phải ghép những manh mối này lại với nhau. Dưới đây là những gì tôi biết cho đến nay:
Để đọc từ chip, tôi sẽ bằng cách nào đó cần truy cập vào SMBus, bởi vì đó là chương trình giám sát bằng cách nào, chẳng hạn như CPUID HWMonitor, đang nhận được thông tin. OpenHardwareMonitor, theo như tôi biết, không có bất kỳ mã nào trong đó để truy cập vào SMBus, đó là lý do tại sao nó có thể không được đọc từ chip. Tuy nhiên, OpenHardwareMonitor có các phương pháp sau đây bao gồm trong Ring0 class của nó, mà nó sử dụng để truy cập thông tin từ các chip khác. Tôi có thể sử dụng các phương pháp này để lợi thế của tôi:
void Ring0.WriteIOPort(uint port, byte value); byte Ring0.ReadIOPort(uint port);
Trong số thông tin khác, HWMonitor báo cáo các thông tin sau về chip Winbond W83793 với tôi khi tôi tiết kiệm một báo cáo:
Đăng ký Space : SMBus, địa chỉ cơ sở = 0x01100
SMBus yêu cầu: kênh 0x0, địa chỉ 0x2F
Dường như t hese là những giá trị quan trọng, nhưng tôi không biết chính xác ý nghĩa của chúng, và cách tôi có thể sử dụng chúng cùng với các phương thức Ring0 ở trên. Hmm ... rất nhiều manh mối. Các giá trị khác mà HWMonitor chỉ cho tôi là điện áp thực tế, nhiệt độ và tốc độ quạt, và một loạt các giá trị thập lục phân đại diện cho dữ liệu từ đâu đó trên chip, mà tôi sẽ tái tạo ở đây nếu bạn muốn xem nó.
Cuối cùng, trong các bảng dữ liệu W83793, trên trang 53 (nếu bạn có các tài liệu đang mở), sau đây là các địa chỉ trong hex của nhiệt độ Tôi muốn đọc (Tôi tin):
TD1 Readout - Ngân hàng 0 Địa chỉ 1C
TD2 Readout - Ngân hàng 0 Địa chỉ 1D
TD3 Readout - Ngân hàng 0 Địa chỉ 1E
TD4 Readout - Ngân hàng 0 Địa chỉ 1F
chút Readout Low - Ngân hàng 0 Địa chỉ 22
TR1 Readout - Ngân hàng 0 Địa chỉ 20
TR2 Readout - Ngân hàng 0 Địa chỉ 21
Đó là tất cả tôi biết cho đến nay .Mã OpenHardwareMonitor, W83793 và mã Ring0 có sẵn thông qua các liên kết được cung cấp ở trên. Như tôi đã nói lúc trước, tôi đã ở đó trong một tháng, và tôi vẫn chưa thể giải được bí ẩn này. Tôi hy vọng bạn có thể giúp tôi. Tất cả các thông tin này có vẻ hơi đáng sợ, nhưng tôi chắc chắn nó sẽ có ý nghĩa đối với một người nào đó với một số kinh nghiệm lập trình cấp thấp.
Để tóm tắt câu hỏi của tôi, hãy sử dụng các gợi ý được cung cấp ở trên để tìm hiểu cách tải OpenHardwareMonitor để đọc nhiệt độ ngoài chip W83793. Tôi không cần chi tiết về việc tạo ra một con chip trong OpenHardwareMonitor. Tôi đã có sẵn một lớp rồi. Tôi chỉ cần trình tự và định dạng để viết các lệnh Ring0, nếu đó là những gì tôi cần làm.
EDIT: Tôi tìm thấy một số thông tin khác. Tôi in một báo cáo thiết bị SMBus từ HWMonitor, và trong số những thứ khác, tôi nhận được dòng này, bao gồm ở đây vì nó nói 0x2F: Thiết bị
SMB: I/O = 0x1100, địa chỉ 0x2F, kênh = 0
Điều này có nghĩa là tôi cần phải bằng cách nào đó kết hợp các địa chỉ của I/O với địa chỉ của chip, có vẻ là 0x2F. Tôi đã thử thêm chúng lại với nhau nhưng sau đó tôi nhận được tất cả các bài đọc nhiệt độ là 255, do đó, đó không phải là đoán đúng.
Điều đó cực kỳ hữu ích, cảm ơn bạn! Tôi đã thử sử dụng các phương pháp đó theo cách bạn đã chỉ định, nhưng kết thúc bằng tất cả 0 cho 4 nhiệt độ đầu tiên (1C - 1F) và 255 cho hai phương thức cuối (20 và 21). Nhưng tôi đã thực hiện một khám phá mới (kiểm tra các chỉnh sửa của tôi đối với câu hỏi ở trên). Có vẻ như 0x1100 không phải là địa chỉ của chip nhưng địa chỉ của kênh SMBus (hoặc cái gì đó), trong khi 0x2F là địa chỉ của chip. Tôi có thể sai. Tôi đã thử thêm địa chỉ cơ sở vào địa chỉ chip được giả định nhưng kết quả vẫn không chính xác. Bất kỳ ý tưởng? – Dalal
Tôi đã bỏ lỡ đầu mối SMBus; sự hiểu biết của tôi là bạn cần hướng dẫn bộ điều khiển SMBus mà bạn muốn đọc từ hoặc ghi vào một địa chỉ cụ thể trên một thiết bị cụ thể. Đặc tả SMBus (http://smbus.org/specs/) quy định cách các thiết bị trên SMBus sẽ được nói và trả lời nhưng chắc chắn không xác định cách một bộ điều khiển SMBus nên nói chuyện với một CPU trong thế giới x86. Vì vậy, điều tiếp theo để tìm là một biểu dữ liệu cho bộ điều khiển SMBus của bo mạch chủ của bạn, hoặc để tìm hiểu xem chúng có đủ chung hay không mà bất kỳ biểu dữ liệu cũ nào cũng sẽ làm. Hai Googles đầu tiên của tôi đã không làm việc, nhưng tôi sẽ tiếp tục tìm kiếm. – Tommy
Tôi tìm thấy bảng dữ liệu cho Intel 5400 MCH (http://www.intel.com/Assets/PDF/datasheet/318610.pdf), có vẻ như là 'Memory Controller Hub' cho bo mạch chủ của tôi, theo bảng dữ liệu của bo mạch chủ. Tôi không chắc đây có phải là điều chúng ta cần không. – Dalal