--- url: https://hackmd.io/nixXMCyNQFyaTSX8dsj5VQ title: Hardware lastSync: 2025-06-05T06:13:19.072Z hackmd: url: https://hackmd.io/nixXMCyNQFyaTSX8dsj5VQ title: Hardware lastSync: 2025-06-05T06:14:57.640Z --- ## 電子電路 - 電學基礎 - 電壓 / 電流 / 歐姆定律 - 被動元件 - 電阻 / 電容 / 電感 / RC電路 - 主動元件 - 二極體 / 電晶體 / 運算放大器 - 模擬電路 - 濾波器 / 放大器 / 震盪器 - 數位電路 - 邏輯閘 / 555 / 計數器 - PCB設計與整合 - KiCad / Arduino 實作 | 比較項目 | 主動元件(Active) | 被動元件(Passive) | | ---------- | ------------------------------ | -------------------- | | **是否提供能量** | ✔ 需要外部電源,可放大或產生能量 | ✘ 不提供能量,只吸收或儲存能量 | | **能量轉換功能** | ✔ 可以將電能轉換為其他形式(例如放大、開關控制) | ✘ 只能消耗或暫存能量 | | **控制能力** | ✔ 能控制電流(例如開關、訊號調整) | ✘ 無法主動控制,響應取決於輸入 | | **非線性性質** | 常為**非線性元件**(如電晶體、二極體) | 多為**線性元件**(如電阻、電容) | | **舉例** | 電晶體(BJT, MOSFET)、二極體、IC、運算放大器等 | 電阻器(R)、電容器(C)、電感器(L) | ## 分壓電路 > [Lab ADC](#Lab-ADC-voltage) ## EEPROM 是儲存單元,負責存放硬體描述(如 FRU 資訊)或 BMC 的設定數據。 ![image](https://hackmd.io/_uploads/S1ftzMBXgl.png) ![image](https://hackmd.io/_uploads/rkk5MfrXgg.png) ![image](https://hackmd.io/_uploads/r195zzHXge.png) M24C64-RMN6TP-2-GP ![image](https://hackmd.io/_uploads/SJUizMHmge.png) ![image](https://hackmd.io/_uploads/HyVaMfSXle.png) ![image](https://hackmd.io/_uploads/rJAafGSQee.png) ![image](https://hackmd.io/_uploads/SJO0MMH7lg.png) ## FRU 是硬體資訊,描述伺服器硬體模組,用於資產追蹤與維修。 ## I2C - 一種低速的雙線通信協議,用於連接主機(如 BMC)和多個外設(如 EEPROM、溫度感測器等)。有主從架構,主機發起通信,從機回應。在 BMC 的應用:用來監控硬體設備的狀態,例如存取 EEPROM 儲存韌體資訊、讀取溫度感測器數據,或控制 GPIO 擴展器。 - BMC 的應用:用來監控硬體設備的狀態,例如存取 EEPROM 儲存韌體資訊、讀取溫度感測器數據,或控制 GPIO 擴展器。 - Philips (現為 NXP) - 適用 低成本 簡單的通訊 ![image](https://hackmd.io/_uploads/S1o_vMSQxx.png) - Feature - [synchronous](https://en.wikipedia.org/wiki/Synchronous_circuit) - multi-controller/multi-target - [serial communication](https://en.wikipedia.org/wiki/Serial_communication) - Usecase - 感測器 - 記憶體(e.g. EEPROM) - 優缺點 - Pros - 通用性高,協議簡單 - Cons - 沒有內建錯誤檢測(例如 CRC) - 缺乏嚴格的時間約束。 - Protocol ![image](https://hackmd.io/_uploads/ryAKwzBXgx.png) - Cmd - 操作範例 1. 找到 I2C bus 和地址: ``` i2cdetect -y <bus-number> ``` 2. 從地址 `0x00` 讀取 8 bytes 的數據(例如:儲存韌體版本): ```bash i2ctransfer -y <bus-number> w1@<device-address> 0x00 r8 ``` 3. 寫入一筆資料到地址 `0x10`: ```bash i2ctransfer -y <bus-number> w2@<device-address> 0x10 0xAA ``` - 掃有哪些I2C: - `i2cdetect -l` - `ls /sys/class/i2c-dev` - 看哪些連結的有回應 ``` root@ums120:~# i2cdetect -y 14 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 50: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- 60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- ``` - 一個 Byte 操作 - example ```bash i2cget -y 1 0x50 0x10 ``` - example ```bash i2cset -y 1 0x50 0x10 0x20 ``` - 複雜 Byte 操作 寫入兩個byte(0x10, 0x20) 到 地址 0x50 讀取 128 bytes ```bash i2ctransfer -y 1 w2@0x50 0x10 0x20 r128 ``` ### Lab Temp Sensor ![image](https://hackmd.io/_uploads/rJi7SGBQee.png) ![image](https://hackmd.io/_uploads/BJY4rzrmgg.png) ![image](https://hackmd.io/_uploads/H1RVSGH7gx.png) ![image](https://hackmd.io/_uploads/HyQHrfB7ge.png) ### Lab FRU ![image](https://hackmd.io/_uploads/BJwpSGHXgg.png) ### Lab IPMI ![image](https://hackmd.io/_uploads/HyHRrzrmlg.png) ## SMBus - (常用) - **簡單解釋:** I²C 的延伸版,加入更多系統管理功能,例如封包錯誤檢查(PEC)和時序控制,用於更可靠的數據通信。 - **在 BMC 的應用:** 常用於與智慧電池(Smart Battery)或溫度感測器等關鍵設備通信,幫助 BMC 進行更可靠的系統健康監控。 - protocol ![image](https://hackmd.io/_uploads/r1oybMHmxg.png) ![image](https://hackmd.io/_uploads/Hk0g-GBQel.png) - common cmd ![image](https://hackmd.io/_uploads/SyPfWfSmxx.png) ## PMBus - 通常用於電源 - PMBus:基於 I²C/SMBus 的高階協議,專門用於電源管理,允許對電源設備進行監控和控制,例如調節電壓、電流或讀取溫度。用於監控電源供應器(PSU)的狀態,確保伺服器的電源供應正常,並在異常時發出告警。 ### I2C vs SMBus vs PMBus | | | | | | -------- | ------------------------------ | ---------------------------------------- | -------------------------------------------------------------- | | | I2C | SMBus | PMBus | | 改進 | | 資料格式,時間約束, CRC 檢查和裝置發現,標準化的命令 | 基於 SMBus,標準化的電源管理指令集。裝置間的互操作性(Interoperability)。精細的控制(如數字電源模組) | | | Philips (現為 NXP) | Intel | | | | Multi-Master, Multi-Slave | | | | Use case | 感測器,記憶體(如 EEPROM) | 系統關鍵元件的通訊(如溫度監控、電源管理)溫度監控。電壓監控。晶片健康狀態監測。 | | | Pros | 通用性高,協議簡單 | 穩定,內建的錯誤檢測 | 標準化的指令集,減少不同廠商之間的兼容問題。源參數監控與配置 | | Cons | 1.沒有內建錯誤檢測(例如 CRC)2.缺乏嚴格的時間約束。 | 1.不如 I²C 靈活。2.傳輸速度限制較低 | 電源管理裝置,不具備通用性。 | ![image](https://hackmd.io/_uploads/BkuU-zH7gx.png) ## SPI - SPI (Serial Peripheral Interface) is a synchronous serial communication protocol used for short-distance communication between a master device (e.g., microcontroller) and one or more slave devices (e.g., sensors, flash memory). - 同步 - 短距離 - application: for interfacing flash memory (e.g., NOR/NAND), sensors, and display modules. ![image](https://hackmd.io/_uploads/BkSVIGrmex.png) ![image](https://hackmd.io/_uploads/BytELzH7ex.png) ![image](https://hackmd.io/_uploads/Sk6VLzH7ex.png) - Usecase - **韌體更新(Firmware Update)**:BMC 通過 SPI 接口在系統運行時更新 BIOS。 - **系統啟動(Boot)**:在伺服器啟動時,CPU 通過 SPI 讀取 SPI Flash 內的韌體。 - **遠端修復(Recovery)**:BMC 通過 SPI 幫助恢復受損的固件。 - Protocol ![image](https://hackmd.io/_uploads/rkAH8fHXlx.png) ### Lab 更新 flash ![image](https://hackmd.io/_uploads/rkIPLGrQee.png) ![image](https://hackmd.io/_uploads/HJ5vLfr7ll.png) ![image](https://hackmd.io/_uploads/Sy0wIGS7xe.png) ![image](https://hackmd.io/_uploads/BkSdIfH7el.png) ![image](https://hackmd.io/_uploads/rkodLfHXll.png) ![image](https://hackmd.io/_uploads/SyeFUfBQgl.png) ## UART ### UART Controller and COM Port - **Universal Asynchronous Receiver/Transmitter** 是一種**序列通訊協定的硬體控制器**,將資料從「平行資料匯流排(如 CPU 寄存器)」轉換成「位元流(bit stream)」以便透過 TX/RX 腳位傳送。 | 名稱 | 是什麼? | 本質角色 | | ------------------- | ------------------------------------------- | ------------------------------ | | **UART Controller** | 一種硬體模組或電路(通常在 SoC、南橋晶片、MCU 裡) | **負責「位元」與「字元」的轉換、傳輸控制邏輯** | | **COM Port** | 作業系統中對 UART 裝置的名稱(如 `/dev/ttyS0` 或 `COM1:`) | **OS 抽象出來的裝置節點,用來存取 UART 控制器** | ### UART Controller 的功能: - **位元編碼與解碼**:例如 8N1 → 8 個資料位、無 parity、1 個停止位 - **波特率設定**:如 115200 bps(即每秒可傳 11.5 萬個 bit) - **中斷控制**:傳完/收完一個字元觸發 IRQ 通知 CPU - **FIFO buffer**:硬體緩衝避免漏資料 ### 存在位置: - MCU 內部(如 STM32 的 USART) - SoC(如 Raspberry Pi 的 miniUART、PL011) - PC 主機板南橋晶片或 LPC-to-UART - PCIe/UART 擴充卡上的 16550 UART 晶片 #### COM Port 是什麼? - 作業系統為了讓軟體存取 UART 而提供的**裝置節點**或「入口名稱」。 #### windows | 裝置名稱 | 對應意義 | | ------ | --------------------------------- | | `COM1` | 第一個 UART 控制器(通常對應 0x3F8 I/O port) | | `COM2` | 第二個 UART 控制器(通常對應 0x2F8) | #### Linux | 裝置節點 | 解釋 | | -------------- | --------------------------------- | | `/dev/ttyS0` | 第一個傳統 UART 控制器 | | `/dev/ttyUSB0` | 透過 USB-to-Serial 裝置產生的虛擬 UART | | `/dev/ttyAMA0` | 特定 ARM SoC(如 Raspberry Pi)上的 UART | | | | ```mermaid graph TD A[CPU Program] --> B[COM Port] B --> C[UART Driver] C --> D[UART Controller] D --> E[TX/RX Pins] ``` | 項目 | UART Controller | COM Port | | ------ | --------------- | ------------------------------- | | 本質 | 硬體模組 | OS 上的裝置名稱 | | 功能 | 傳輸控制、編碼解碼、FIFO | 提供使用者層讀寫介面 | | 類型 | 嵌入式/外接晶片 | Windows: COM1、Linux: /dev/ttyS0 | | 與使用者關係 | 背後黑盒 | 使用者直接讀寫的對象 | ### 什麼是 UART routing? - UART routing 是在 DTS 中定義每條 UART 的角色與接腳對應,讓 kernel 知道怎麼初始化它。 - 對 OpenBMC 來說,這樣的路由資訊關鍵於: 1. **哪個 UART 提供給主機作為 serial console**?(如 ttyS0 → SoL) 2. **哪個 UART 用來與外部裝置通訊**?(如 MCU、CPLD、sensor) 3. **哪些 UART 是無用或要 disabled**? ## GPIO - GPIO (General Purpose Input/Output) is a versatile pin on a microcontroller or System on Chip (SoC) that can be configured as either an input or an output. Key features include input mode, output mode, and additional functionalities such as pull-up/pull-down resistors and interrupt generation. ![image](https://hackmd.io/_uploads/BJWaIMBQgg.png) ![image](https://hackmd.io/_uploads/By_TIzrXll.png) ![image](https://hackmd.io/_uploads/rkpa8frQll.png) ![image](https://hackmd.io/_uploads/Syf0IGBXee.png) ![image](https://hackmd.io/_uploads/rkPAIfHmgl.png) ![image](https://hackmd.io/_uploads/BJoRUMSmxe.png) ### Lab Blinking LED ![image](https://hackmd.io/_uploads/r1DJDfBXex.png) ![image](https://hackmd.io/_uploads/SJ1MDfSQlg.png) ### Lab ADC voltage ![image](https://hackmd.io/_uploads/ryXwdzSmee.png) ![image](https://hackmd.io/_uploads/SJRjdMHQgx.png) ![image](https://hackmd.io/_uploads/ry2hOMB7xl.png) - read schmantic 看astspeed 2600 spec 可以去 `/sys/bus/platform/drivers/gpio_aspeed` 下 `devmem {}` - 驗證去 `/sys/class/hwmon/hwmon5` 可以看掛載在 hwmon 的值 `` ![image](https://hackmd.io/_uploads/HyFJYMSQxg.png) ![image](https://hackmd.io/_uploads/H1ygKfHQll.png) ![image](https://hackmd.io/_uploads/ryExtzHQlg.png) ## MCTP **MCTP (Management Component Transport Protocol)** **管理元件傳輸協議** - **功能**:MCTP 是一種定義在不同物理介質(如 I²C/SMBus、PCIe、Ethernet 等)上傳輸管理資訊的標準協議。它提供了在不同系統管理元件之間的高效通訊方法。 - **特點**: - 支援多種底層傳輸介質。 - 提供通用的封包格式,讓不同的管理協議(如 PLDM、SPDM)可以共存。 - 提供分層結構,讓傳輸層與應用層分離。 - **應用場景**: - 用於傳遞設備管理指令、狀態報告或固件更新。 - 在 BMC 中,MCTP 經常作為管理通訊的骨幹。 ## PLDM **PLDM (Platform Level Data Model)** **平台級數據模型** - **功能**:PLDM 是用於系統管理的一套協議集合,旨在統一管理功能的數據結構和通訊方式。 - **核心特點**: - 提供了標準化的管理命令和響應格式。 - 支援多種功能模組(例如:Firmware Update、Event Logging、Monitoring 等)。 - **模組分類**: 1. **PLDM for Firmware Update**:提供標準化的固件更新方法。 2. **PLDM for Sensor and Control**:用於傳感器數據讀取和控制。 3. **PLDM for Redfish Device Enablement**:將 PLDM 與 Redfish 整合,方便系統管理。 4. **PLDM for Event Logging**:用於記錄系統事件。 - **應用場景**: - 將 BMC 與其他系統管理元件(如電源管理模組)進行交互。 - 為硬體廠商提供標準化的管理協議,減少客製化開發的工作量。 ## SPDM **SPDM (Security Protocol and Data Model)** **安全協議與數據模型** - **功能**:SPDM 是一個用於設備間安全通信的協議,主要用於身份驗證、機密性和完整性保護。 - **特點**: - 提供雙向身份驗證:設備之間可以相互驗證其身份。 - 支援基於硬體信任根(如 TPM)的安全機制。 - 提供數據加密與完整性保護,確保敏感數據不被竄改或洩露。 - **應用場景**: - 用於硬體設備之間的可信通信,例如 BMC 與其他管理模組之間的安全連線。 - 在固件更新中確保數據來源可信。 - 應對硬體供應鏈中的安全挑戰(如防範偽造設備)。 ## SoC ### ast 2600 **AST2600 的主要特點** 1. **處理器架構** - 搭載 **雙核心 ARM Cortex-A7** 處理器作為主核,運行速度高達 1.2GHz,提供高效能。 - 內建一個 **ARM Cortex-M3** 協處理器,用於即時控制和節省能耗。 - 採用 28nm 製程,功耗更低,性能更佳。 2. **內存和存儲支持** - 支援 DDR4 和 DDR3 記憶體,容量最高可達 8GB。 - 提供 SPI、eMMC、SD 等多種存儲接口,滿足多樣化存儲需求。 3. **網絡功能** - 集成 **雙 GbE 網卡(PHY)**,支持 NC-SI(Network Controller Sideband Interface)。 - 提供多通道網絡虛擬化功能,實現更靈活的網絡管理。 4. **顯示和圖形** - 支援 2D 硬體加速引擎,提供基本的圖形渲染能力。 - 支援 HDMI 和 VGA 接口,分辨率最高可達 **1920x1200**。 5. **安全功能** - 集成 **TPM(Trusted Platform Module)2.0**,提供硬體級安全保護。 - 支援 **Secure Boot** 功能,保證固件來源可信。 - 支援加密引擎,用於硬體加速的 AES、SHA 和 RSA 演算法。 6. **系統管理與協議支持** - 支援業界主流的管理協議,包括 **IPMI 2.0**、**Redfish**、**MCTP**、**PLDM** 和 **SPDM**。 - 兼容多種操作系統,如 Linux(常見於 OpenBMC 平台)。 7. **I/O 和擴展性** - 提供多種 I/O 接口,包括 PCIe、USB、I²C、SPI、UART 和 GPIO。 - 支援多個 I²C 控制器,方便連接外部感測器和其他元件。 **AST2600 的應用場景** 1. **伺服器管理** - 作為 BMC,用於監控伺服器硬體狀態(如溫度、電壓、風扇速度等)。 - 支援遠端開關機、固件更新和事件日誌管理。 2. **雲端資料中心** - 通過 Redfish API 實現統一的伺服器管理和自動化。 - 高性能和低功耗特性適合高密度伺服器部署。 3. **嵌入式控制** - ARM Cortex-M3 核心可用於即時任務(如電源控制或嵌入式監測)。 - 提供強大的硬體加密能力,用於敏感數據處理。 4. **高效能計算(HPC)** - 通過 MCTP 和 PLDM 進行高效的硬體管理。 - 提供可靠的安全機制以保護運算環境。 ** ## 邏輯分析儀 ## JTAG ## Sensors ### TMP75 - TMPx75 Temperature Sensor spec ![image](https://hackmd.io/_uploads/rkvVMfHQex.png) ![image](https://hackmd.io/_uploads/rJZSGfSQeg.png) ![image](https://hackmd.io/_uploads/S1KrGzB7gl.png) ![image](https://hackmd.io/_uploads/BJg8zGBmlx.png) 0x1027 0x027 16*2+7 39 ![image](https://hackmd.io/_uploads/S16vzzBQxl.png)