2019年6月23日 星期日

[行動電源] ASUS ZenPower Pro PD

USB 行動電源
  • 4 顆三星 SDI INR18650-35E 18650 電池串聯 = 4x 3.6V x 3400mAh = 14.4V x 3400mAh = 48.96 Wh
  • 額定容量:5V/7600mAh (38Wh), 9V/4500mAh (40.5Wh), 15V/2500mAh (37.5Wh), 20V/1600mAh (32Wh)
  • 電源開關
    • 按下顯示電量或充電
    • 長按 2 秒開啟/關閉照明 LED
  • 四顆白色電量指示燈:同時快速閃爍表示偵測到錯誤,重新拔插 USB 線。
  • 照明 LED
  • USB-A 輸出 5V/2.4A,USB-C 充電時可同步進行放電。
  • USB-C
    • 輸入:5V/3A、9V~15V/2A、20V/1.5A,QC 充電
    • 輸出:5V/3A、9V/3A、15V/3A、20V/2.25A
    • 轉接線輸出 20V。插在其他 USB PD 電源裝置可能沒有反應。
  • 輸出合計最大 45W
  • 320g
  • NT$2990
  • PD 3.0快充
  • 0° C - 35° C

參考

  1. https://dlcdnets.asus.com/pub/ASUS/Phone_Accessory/PowerBank/T14102_ABTU016_Power_Bank_UM_final.pdf
  2. ASUS ZenPower Pro PD行動電源簡介及測試
  • HOLTEK HT32F52341 32 位元 Cortex-M0+ 微控制器,負責整個行動電源的功能運作。
  • TI BQ25703A 多元化電池升降壓充電控制器,支援 USB 2.0、USB 3.1、Type-C、USB PD 充電輸入設定,並具備電壓/電流調節功能避免充電輸入端過載,也支援從電池供電給 USB (相容USB PD)
  • ETRONTECH EJ899T USB PD 3.0 控制IC,可進行供電端及受電端雙向 Power Delivery 協議處理,使 USB-C 埠具備雙向 USB PD 3.0 快充功能,其傳輸電力規格最高可支援100W(20V/5A),並通過 USB-IF 協會認證
  • TI TPS54335A 同步降壓IC,將電池組電壓轉換成 USB-A 5V 輸出
  • ABLIC S-8254A 三/四節電池串聯用保護 IC,和 MOSFET 共同組成鋰電池過充/過放/過電流保護電路

2019年6月21日 星期五

SIP UA 共通行為

SIP UA 共通行為 [RFC3261 §8]

UA (User Agent) 分成 User Agent Client (UAC) 和 User Agent Server (UAS)。UAC 產生 SIP 請求,而 UAS 回應 SIP 請求。UAC 因某個事件 (如用戶按按鍵、 PSTN 上的一個訊號) 產生 SIP 請求,然後等候 UAS 的處理和回應。UAS 接受請求後,基於用戶輸入、外部 stimulus、程式執行結果、或其它機制,產生回應給 UAC。

當 UAC 傳送請求,請求訊息經過一些 proxy server 來轉送到 UAS。當 UAS 產生回應,會轉送到 UAC。

UAC 和 UAS 處理的程序主要取決於兩個因素:
  1. 是否請求或回應是在 dialog 內或 dialog 外。
  2. 請求的 Method。
dialog 是 UA 間由特定 SIP Method (譬喻 INVITE) 建立的端對端關係,會在 RFC 3261 Section 12 討論。這裡討論 dialog 外和 Method 無關的規則行為,包含建立 dialog 本身的請求。

UAC 行為

產生請求

所有 SIP 請求至少必須包含請求行和 6 種信頭:

  1. 請求行 (Method、Request-URI 和 SIP version)
    • Request-URI:一般設成 To URI,但未必,如 REGISTER。 事先存在的 Route Set (如 Outbound Proxy) 會影響 Request-URI。
  2. To
    • 邏輯上的接受者,但未必是最終的接受者。
    • 至少要支援 sip: URI,可用 sips:、tel:、或其它 URI。
    • 允許 display name
    • To tag:此時 Dialog 未建立,所以不能有。
  3. From
  4. CSeq
  5. Call-ID
  6. Max-Forward
  7. Via

這些信頭欄位提供訊息 routing 服務所需要的基本資料,包括位址、順序、回應怎麼走、propagation 限制、 以及 transaction 識別。其它信頭欄位視 Method 需要增加。可以包含 MIME 編碼的訊息體,需要加 Content-Type 等信頭欄位來表示是什麼內容。

8    Contact
9    Supported and Require

傳送請求

Sending the Request

處理回應

Processing Responses
1    Transaction Layer Errors
2    Unrecognized Responses
3    Vias
4    Processing 3xx Responses
5    Processing 4xx Responses

UAS Behavior

請求認證過 (或跳過認證) 後,UAS 應該按照下列步驟來處理請求:
  1. Method Inspection:檢查請求的 Method 支援繼續處理。不支援則回 405 (Method Not Allowed) (產生方式見 6),並加 Allow 信頭 列出支援的 Method。
  2. Header Inspection:不認得的信頭跳過,忽略請求處理不是必要的格式錯誤信頭。
    1. To and Request-URI:To 是 From 指定的原始接受者,但未必是處理的 UAS,由於 call forwarding 或其它 Proxy 操作,UAS 可以選擇接受,即使 URI scheme 不認得。否則回應 403 Forbidden、404 Not Found 或 416 Unsupported URI Scheme 來拒絕請求。 Typically, a UA that 使用 REGISTER 來 bind its address-of-record 到 a specific contact address, will see requests whose Request-URI equals that contact address. Other potential sources of received Request-URIs include the Contact header fields of requests and responses sent by the UA that establish or refresh dialogs.
    2. Merged Requests
    3. Require
  3. Content Processing
  4. Applying Extensions:UAS 只能對 Supported 有列的 SIP 擴充是否採用產生回應,在回應的 Require 放採用的 option-tag。如果一定要用某個不支援的 SIP 擴充,回 421 Extension Required 用 Require 表示需要的 SIP 擴充,但不建議,因為可能會破壞互通性。
  5. Processing the Request:針對不同 Method 有不同處理。
  6. Generating the Response
    1. Sending a Provisional Response
    2. Headers and Tags

Stateless UAS Behavior

2019年6月16日 星期日

USB 供電

USB 規範有幾個面向,包括連接器傳輸速度等,這裡談供電。

USB 線兩端分為主機端和週邊端,主機端用 Type A 插頭插入 Type A 插座,週邊端用 Type B 插頭插入 Type B 插座。通常主機提供 Type A 插座;而週邊可以跟 USB 線整合,看到就是 Type A 插頭,方便插入主機。插頭和插座依大小分成標準、mini、和 micro。mini 和 micro 有 Type AB 插座,可插 Type A 或 Type B 插頭,由插頭內的 ID 訊號讓裝置決定是要當作主機或週邊。

主機負責供電和主管通訊。後續兩端可經由 Host Negotiation Protocol 協調交換主機和週邊的角色。

原本標準 USB 提供的電源電壓是 5V,連接的裝置一開始使用 low-power 模式,使用最多 100 mA 的 1 單位電流 (在 SuperSpeed 設備 150 mA)。然後週邊如果要更多電流,需要要求所需的電流切到 high-power 模式,最多 5 單位 500mA,計 2.5W (SuperSpeed 有 6 單位的 900 mA,計 4.5 W)。Host controller 可以關掉一些裝置來避免過載。

由 USB Bus 供電的 USB hub,本身是屬於消耗 high-power 的裝置,對外只能提供 low-power 埠。USB hub 有外接電源時,可提供 high-power 埠,自己可維持為 low-power 裝置。

USB 電源,一般 5V/500mA 只有 2.5 W,用來充電太慢,有些裝置 (譬喻 USB 硬碟) 也需要更大電流。於是有兩個 USB Y 接達到 5W,或用其它方式判斷提供更大電流,但這些不是標準的方式。

USB 標準的 Battery Charging (BC)

BC 定義兩種充電 USB 埠 -- CDP (Charging Downstream Port) 和 DCP (Dedicated Charging Port),其 D+ 和 D- 間的電阻少於 200Ω,一開始就不限制,可直接提供 0.5 A 到 1.5 A 的電流,達 7.5 W。原本需要先 low-power 模式再 high-power 模式的 USB 埠稱為 SDP (Standard Downstream Port)。

由於大電流會干擾 Hi-speed 的傳輸速度,BC 1.1 限制 Hi-speed 時的電流。BC 1.2 ....

連接器最大電流最大瓦數
USB 1.x/2.05V/500mA2.5W
BC1.2: 5V/1.5A7.5W
USB 3.05V/900mA4.5W
USB-C5V/1.5A 預設, 5V/3A max15W
USB PD: 5V/9V/12V@3A max, 20V@5A max
USB PD 3.0 with PPS: 3V ~ 20V, 5A max
註:5A 需要有電子標籤的 USB-C 線,不然最高 3A。
100W
(60W)

USB 標準的 Power Delivery (PD) (有電池背景圖案)

USB PD rev. 1 (俗稱 PD 1.0)

使用 Type A/B 連接器支援三種電壓 5V、12V、20V,最高供電 100W,並向下相容 USB 3.0/2.0、BC 1.2/1.1/1.0,訂有 5 種 Profile。透過 VBUS 傳 24 MHz BFSK 訊號溝通,並可決定供電方向。
 
Profile5V12V20V
12.0A, 10WN/AN/A
21.5A, 18W
33.0A, 36W
43.0A, 60W
55.0A, 60W5.0A, 100W
註:Profile 5 用於標準 A/B 或 Type-C 連接頭,microUSB 不支援。

USB PD rev. 2 (俗稱 PD 2.0)

和 USB 3.1 一起發表,同時有了 Type C,捨棄 5 種 profile 方式,改用預先定義的 5V、9V、15V 和 20V 的 4 種電壓。

USB PD rev. 3 (俗稱 PD 3.0)

捨棄了 BFSK,並增加支援 PPS (Programmable Power Supply) 以 20 mV 調整電壓,可對電池進行高效直充,電壓可以低達 3V。開始相容各家快充協定,可支援 QC 4.0 快充。

Type C 才有的 CC 訊號用來決定是主機端、還是週邊端,一開始由兩端設備對 CC 的接線決定,後續可溝通分別決定資料通訊為下行埠 (Downstream Facing Port, DFP,主機端) 或上行埠 (Upstream Facing Port, UFP,週邊端),以及電源是供電端 (Source)、還是負載端 (Sink)。

Type C 的 VBUS 一開始是不供電的,先由 CC 的電壓決定的供電能力後才提供 5V。電壓約 0.41V 使用預設的 USB 2.0 500mA 或 USB 3.0 900mA,約 0.92V 對應的最大電流是1.5A,約 1.68V 對應的最大電流是 3A。週邊的 Rd 是 5.1kΩ,主機的 Rp 可能接到 5V 或 3.3V 而有不同電阻值,或者採用 current source 決定電壓。

引入 PD 協定後,Type-C VBUS 電壓可以增加到最高20V:
  1. 負載端跟供電端申請供電能力資料。
  2. 供電端提供供電能力資料。
  3. 負載端從供電能力資料中選出適當的電源配置參數發出請求。
  4. 供電端接受請求並按照定義好的電壓提升速度來更改 VBUS 電壓。此時負載端的電流消耗會保持盡可能地小。
  5. VBUS 電壓達到最後數值穩定以後,供電端發送出一個電源準備好信號。此時負載端可以增加其電流消耗。
當負載端想要 VBUS 電壓降低,在電壓下降期間,供電端會啟動一個分流電路來主動放電使電壓快速降低。達到額定值穩定以後,送出一個電源準備好信號。

CC 訊號的 PD 通訊使用 BMC (Bi-phase Mark Code,資料 1 需要有一次高低電壓切換,資料 0 則是固定電壓)。每個資料包都含有 Preamble、SOP (Start of Packet)、Header、Data、CRC 和 EOC (End of Packet)。

使用普通電纜最大電流是 3A,即 60W。如果使用了含電子標籤的電纜,20V 可到 5A,即 100W。

Type C 電纜要有電子標籤來支援 USB 3.1 超速資料傳輸或承載超過 3A 電流,另一條 CC 線會有比 Rd 5.1kΩ 小的下拉電阻 Ra 1kΩ,讓供電端知道此線作為 Vconn 提供 5V 給電纜中的 IC。其後的 PD 通訊中將包含供電端和電子標籤之間的通訊 (SOP’ 或 SOP”) 以及供電端和負載端之間的通訊 (SOP)。

Qualcomm 的 Quick Charge

Qualcomm CPU 手機專有的快速充電技術 Quick Charge,由 V+ 和 V- 電壓決定 VBUS 電壓:
V+V-VBUS
0.6VGND5
3.3V0.6V9
0.6V3.3V12
3.3V3.3V20

其它

  • Apple
    • D+ = D- = 2.0V:0.5A (電腦)
    • D+ = 2.0V, D- = 2.7V:1.0A (iPhone 充電器)
    • D+ = 2.7V, D- = 2.0V:1.5A (iPad 充電器)
    • D+ = D- = 2.7V:2.4A (2.4 充電器)
  • 很多是 D+、D- 腳位短路
  • 符合 USB Charging 規範的充電器輸出 5V,D+ 和 D- 間的電阻決定可提供的最大電流,越小電流越大,電阻 0 表示沒限制。
  • 其它:三星、中國 YD/T1591 - 2009
過電流保護?

產品

行動電源:線的主機端大多是 USB-A 的,要過渡到 USB-C,最好有 USB-A 和 USB-C 雙輸出。輸入最好是 USB-C 的,能用週邊端是 USB-C 的線,逐步淘汰 micro USB。

手機供電

市電:線的主機端大多是 USB-A 的,要過渡到 USB-C,最好有 USB-A 和 USB-C 雙輸出。

  • Innergie PowerGear 90:筆電輸出
  • Innergie PowerGear 65 Pro:USB-A 5V 和 19V 筆電輸出, $1490
  • Innergie PowerGear 65:筆電輸出
  • Innergie 65U:筆電輸出
  • Innergie 65W:USB-C 頭輸出
  • Innergie PowerGear 60C:USB-C 5/9/12/15/20V 輸出, 92%, 60x30x30, 85g, $2490,+ MagiCable 150 $3170
  • Innergie C6 (GaN):USB-C 5/9/12/15/20V 3A 輸出
  • GENKI Dock:30W USB-C PD 3.0 5/9/15V 和 USB-A 3.1 輸出的充電器,採用氮化鎵 GaN 技術,USB-C 可轉為 USB-A 和 HDMI。
  • SlimQ:USB-A 5/9/12V 和 USB-C 5/9/12/15/20V 輸出, GaN 94% (88%), 65x33x28, 91g, $1xxx

車充:線的主機端大多是 USB-A 的,要過渡到 USB-C,最好有 USB-A 和 USB-C 雙輸出。

  • OMNIA C1 Pro 83W $699 保護?
    • USB-C 65W PD 5/9/12/15V 3A, PPS
    • USB-A 18W QC3.0
  • PowerFalcon x Aliand
    • USB-C:PD 3.0 30W(5V/3A, 9V/3A, 12V/2.25A, 15V/2A, 20V/1.5A) (PD3.0/Apple Mode/QC2.0/QC3.0/AFC/FCP)
    • USB-A:QC 3.0 18W(3.6-6V/3A, 6-9V/2A, 9-12V/1.5A)(Apple Mode/QC2.0/QC3.0/AFC/FCP)
  • Baseus倍思45W大功率數顯智能車充BS-C20CTW LED數顯,輸入 24V 才能輸出 15V/20V
    • USB-C:5V/3A、9V/3A、12V/3A、15V/3A、20V/2.25A
    • USB-A:4.5V/5A、5V/4.5A、9V/3A、12V/3A、20V/2.25A
  • Innergie PowerJoy 30D 車充:USB-A 和 USB-C 5/9V 輸出
  • PowerFalcon PS36WQCA3-CUB USB Type-C/PD,QC3 USB Type-A/QC3,各為 18W (3.6-6.5V/3A,6.5-9V/2A,9-12V/1.5A),充電狀態指示
  • PS36WQCA3-CUB-01 有 Type-C PD
  • Nokia P6105 有 20V 輸出
  • :Baseus/倍思 TZCCZM0G 160W

觸發器或誘騙器:控制輸出電壓。最好是 USB-C 通用的。

USB 電錶

  • YZXSTUDIO ZY1280
    • 上一代 ZY1276
    • https://wolflsi.pixnet.net/blog/post/67046421
  • Kotomi Pre (含觸發等功能)
    • 具備上一代 Kotomi Pro 的所有特點及功能
    • https://wolflsi.pixnet.net/blog/post/66243654
  • POWER-Z KT001
  • POWER-Z KM001C
  • KM003C
  • KM002C-Lite:PD3.1, 50V 6A, ...

非 USB 充電器轉成 USB

  • C-Force AnyWatt:電源輸入 16-21VDC @3A min, PD 3.0 輸出:5V/3A、9V/3A、12V/3A、15V/3A、20V/2.25A (輸入 >= 20V), PPS 輸出:3-12V/3A
  • SEKC SCC-PD7242W 車充:電源輸入 12/24VDC, PD 輸出:5V/3A、9V/2.7A、12V/2A (max. 24W), QC3.0 輸出:3.6V-6.5V/3A, 6.5V-9V/2A, 9V-12V/1.5A (max. 18W)
  • AC 轉

 USB 升降壓

  • XY-UP
  • XY-LUP

參考

  1. https://en.wikipedia.org/wiki/USB_hardware#Power
  2. https://www.richtek.com/Design Support/Technical Document/AN056?sc_lang=zh-TW
  3. https://github.com/Ralim/ts100/issues/24
  4. https://www.digitaltrends.com/mobile/how-does-fast-charging-work
  5. Power Over Ethernet 

2019年6月14日 星期五

ASUS ZenPower 行動電源

使用說明
  • http://www.asus.com/zentalk/tw/forum.php?mod=viewthread&tid=66396http://www.mobile01.com/topicdetail.php?f=588&t=4257231 有使用說明書照片
  • 電池容量 9600mAh@3.75V、額定電容量 6510mAh@5V = 32.55Wh
  • 215g
  • LED 顯示
    • 按電源開關或插入裝置時啟動,依剩餘電量顯示,5 秒後會自動關閉
    • 放電時會依剩餘電量慢閃
    • 四顆快閃時為錯誤,重新拔插 USB 線可排除
  • 負載過小時會自動關閉
  • 可同時放電跟充電嗎?
  • 11 重安全保護機制:溫度保護、短路保護、Rest 保護、輸入過壓保護、輸出過壓保護、輸入防反保護、輸出過流保護、電芯 PTC 保護、充電器保護、Jetia 保護。
主要元件
  • 三顆鋰電池 LGABE 11865 並聯 3.75V
  • MPS MP2636 充電電池充放電 IC
    • 充電模式及升壓放電 (boost) 模式
    • 建議充電電壓 4.5V~6V
  • 賽微電子 CW3002 USB 充電辨識 IC
  • HOLTEK HT68F30-1 MCU,用於電量顯示及行動電源功能控制
參考來源

2019年5月31日 星期五

行動電源

行動電源的電源輸出入大多使用 USB,但也可能使用其它界面,可用來手機充電、驅動 LED 燈條、驅動風扇、筆電供電、救車等。

輸入:最好是 USB-C 的,逐步淘汰 micro USB。 輸出:最好有 USB-A 和 USB-C 雙輸出,過渡到 USB-C。
  • USB-A
  • USB-C (支援筆電電壓)
  • 救車 (需要瞬間大電流)

行動電源容量有兩種,一種是電芯(電)容量,另一種是輸出的額定(電)容量。輸出時,不同電壓耗損不同,對應的額定容量也不同。電容量單位可能是「mAh」或「Wh」。mAh 要乘以電壓除以 1000 是 Wh,電芯電壓一般是 3.6V,輸出電壓有 5V 等。另外行動電源充電時也會有耗損,所以充電電容量 > 電芯電容量 > 額定電容量。

電容量輸入或輸出的速度是功率,單位是 W,或以電壓和電流分別表示 (5V / 1A、5V / 2A、9V / 2A、12.1V / 1.5A 等)。一般輸出功率越高能源轉換耗損越高,轉換效率越低。

產品
  • ASUS ZenPower (32Wh, 5V)
  • ASUS ZenPower Pro PD (48.96 Wh, 輸出 5/9/15/20V max. 45W)
  • ASUS ZenPower Max:等效 3.6V x 26800mAh = 96.48 Wh [港都狼仔評測]
  • QUANHAN全漢創意PD20000: 等效 3.6V x 20000mAh = 72Wh, 65W
  • V-Mount鋰電池:單顆PAGlink電池的電力為96瓦-小時、14.8V、6.5Ah
  • Lenovo USB-C 筆記型電腦行動電源 14000 mAh = 48Wh:USB-C x1 45W, USB-A x2 各 10W, 292g
  • mophie powerstation USB-C 3XL 電池:26,000 mAh,45W USB-C,額外的 USB-A 輸出。Priority+ 直通式充電功能先對裝置充電,後會對本身充電。
  • mophie powerstation USB-C XXL 通用電池:19,500mAh,30W USB-C,額外的 2.4A USB-A 輸出。透過電腦充電時,可將 USB 埠切換成電源輸入。Priority+ 直通式充電功能先對裝置充電,後會對本身充電。
  • Anker PowerCore+ 10000 Pro 行動充電器:同時對 PowerCore 電池及 iPhone 充電。PowerCore+ app 韌體更新。
  • Zendure|27000mAh SuperTank 四孔極速行動電源:邊充邊放
  • ZENDURE SuperTank Pro 26800mAh/96.48Wh 行動電源簡測:支援邊充邊放。4 組 USB-C 埠,最大 100W PD 輸入/輸出。OLED 螢幕顯示資訊。可更新韌體。18650 電池。
  • Zendure SuperMini 10000mAhx3.63V=36.4Wh 180g 21700 電池 $1680 $1380

2019年5月25日 星期六

prefetch

在 Linux Kernel,為了減少 cache miss 來增進效能,可將預期會用到的資料用 prefetch() 事先讀取,但有些只是想像效能會較好,沒有實證反而可能有反效果。

例如 <linux/list.h> 的 list_for_each() macro:
    #define list_for_each(pos, head) \
 for (pos = (head)->next; prefetch(pos->next), pos != (head); \
            pos = pos->next)
經過實證反而效能較差 (短 list、null prefetch),硬體自己做的不會較差。

其它:
  • reordering structures that commonly accessed together fields are found in the same cache line
  • linked-list => cache-unfriendly
  • singly-linked hlist hash table list 
  • likely()
參考:
The problem with prefetch

2019年4月5日 星期五

Base64

Base64 編碼用 64 個可列印字元來表示二進位資料。二進位資料每 6-bit 為一個單元,對應到 26 = 64 可列印字元中的其中一個。每 3-byte = 24-bit 用 4 個可列印字元表示。

64 個可列印字元前 62 個依序是 A-Z、a-z、0-9,剩下兩個字元大多使用 + 和 /,但有其它變種。另外,資料長度不是 3 的倍數時,可以加以填充,多 1 需要填 ==,多 2 需要填 =,讓結果長度都是 4 的倍數。

傳送或儲存二進位資料時,有些情況有些字元有特別用途,所以需要 Base64,限縮只用可列印字元來表示,包括 MIME 的電子郵件等。

用在 URL:+ 和 / 會轉為 %XX 格式,所以改用 - 和 _。

用在正規表示式:+ 和 / 有特殊含意,所以改用 ! 和 -。

其它使用不同 64 字元集的編碼方法則不稱為 Base64,如 uuencode、BinHex。

https://en.wikipedia.org/wiki/Base64

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...