alanhc
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    --- 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)

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully