简介:这份PDF面向低功耗显示驱动选型、电子价签、可穿戴设备与IoT终端设计人员,系统梳理Sitronix ST7305/ST7306超低功耗a-TFT驱动IC的版本差异、关键规格与典型应用。内容围绕主版本ST7306与入门版ST7305的单色、4色、8色、64色分辨率组合,1Hz On+Off ULP驱动方式,反射式与透反射式LCD适配,-30~85℃宽温工作,以及纽扣电池续航估算展开;文中给出2.13英寸电子价签约6.5μA、CR2450电池约8.32年寿命等参考数据,并覆盖电子价签、可穿戴、智能仪表、医疗与远程控制等场景,便于读者快速评估方案功耗与显示规格的匹配度。资源包仅含1个PDF文件,大小约533KB,适合作为芯片选型、模组评估和低功耗显示方案设计的速查资料。目前已有898人学习下载,可帮助读者掌握两款芯片的规格边界、功耗测算思路、应用场景取舍与设计注意事项。
1. 一颗CR2450的两种算法:ST7305 与 ST7306 这套超低功耗 a-TFT 驱动方案到底解决什么
一颗 CR2450 纽扣电池,标称容量 620mAh。把它接到一块 1.3 英寸 262K 色常规 TFT 模组上,模组电流 5mA,除一下是 124 小时,五天出头就得想办法换电池。同一颗电池,接到 2.13 英寸单色 a-Si TFT 配 ST7305 的价签模组上,面板加驱动 IC 平均 6.5uA,MCU 板再算 2uA,合计 8.5uA,除下来 72941 小时、3039 天、八年多。差别不在电池,也不在面板尺寸,而在驱动 IC 用什么节奏去推这屏。
ST7305 和 ST7306 是两颗面向超低功耗场景的 a-TFT 显示驱动 IC,一个入门版、一个主版本,配合反射式或透射反射式面板,把「始终显示」这件事的电流压进微安级。这套方案适合三类人:做电子价签、智能仓储标签的产品工程师;做可穿戴、遥控器、温度计、医疗终端这类小电池长待机设备的硬件负责人;以及要交一份完整低功耗显示设计方案的毕设或课设同学。往下按需求、时序、选型、实现、避坑、验收的顺序拆开讲。
2. 驱动时序设计:把 60Hz 刷新压到 1Hz,省下来的电到底有多少
2.1 常规 a-TFT 驱动与 ULP 驱动的时序差别
常规 a-TFT 面板的驱动逻辑很朴素:每一帧 1/60 秒,一秒推 60 帧,不管画面有没有变。屏幕显示一张静态的价签图片,源极驱动照样每秒翻转 60 次,电荷泵照样每秒工作 60 轮,功耗就摆在那里。这块功耗和「画面变化频率」几乎无关,只和「刷新频率」有关,这是很多人第一次做低功耗显示时最容易忽略的一点。
ST7305/ST7306 的 ULP 驱动方式把帧周期从 1/60 秒拉到 1 秒,也就是 1Hz。一秒钟只推一帧,源极驱动的翻转次数降到原来的六十分之一,电荷泵的开关次数同步下降,平均电流自然跟着掉一个量级。更关键的是它引入了 On + Off 双模式:在两次刷新之间的那一秒里,把不需要的模拟模块关掉(Off),只在刷新窗口内打开(On),刷完立刻回到关断态。
这里有个容易误解的地方——1Hz 不等于「屏幕一秒才动一次所以卡」。电子价签、温湿度读数、智能锁的电量图标,这些内容本来就几分钟才变一次,1Hz 的刷新率对它们是过剩的;真正需要流畅动效的场景本来也不该选反射式面板。我一般会跟人这么解释:这套方案不是把屏幕做慢,是把「屏幕没变的时候还在空转」这件事砍掉了。
判断一颗 IC 是不是真的在按 ULP 模式跑,看电流波形最直接。正常 ULP 状态下,示波器抓到的是周期性窄脉冲:一个刷新窗口内电流冲到毫安级,窗口之外掉到微安甚至更低,占空比极低。如果波形是连续不断的锯齿,说明要么帧率配置没生效,要么 Off 模式压根没进,得回头查初始化序列。
2.2 On/Off 双模式与整机静态电流预算
把功耗算清楚,得先分清哪部分是谁的。以 2.13 英寸单色 a-Si TFT(250×122)配 ST7305 的模组为例,官方给的分解是面板加驱动 IC 约 6.5uA,MCU 板约 2uA,整机 8.5uA。这个数字里,驱动 IC 和面板占了大头,MCU 反倒不是主要矛盾——但只要 MCU 唤醒策略写错,2uA 能变成 200uA。
整机静态电流预算通常要按下面这张表逐项过,缺一项都可能在实测时被打脸:
| 功耗项 | 典型量级 | 说明 |
|---|---|---|
| 面板 + 驱动 IC(1Hz ULP) | 6.5uA | 单色 2.13 英寸反射式模组 |
| MCU 休眠基流 | 1~2uA | 取决于休眠深度与时钟源 |
| 传感器待机 | 0.5~3uA | 温湿度类器件差异很大 |
| LDO 静态电流 | 0.5~5uA | 选型时最容易漏掉的一项 |
| GPIO 漏电 / 上拉电阻 | 0~50uA | 悬空引脚、常开上拉是重灾区 |
| 电池自放电 | 1~3% / 年 | 长期寿命折算要扣掉 |
MCU 侧还有一笔账值得单独算:唤醒刷新一次的能耗。假设唤醒后 3mA 跑 10ms,单次耗电 30uC。如果每小时刷一次,平均下来 30uC÷3600s ≈ 8.3nA,可以忽略;如果改成每小时刷 60 次,平均就是 0.5uA,占整机预算的 6%。所以低功耗设计里真正该抠的是「刷新频率 × 单次唤醒时长」,而不是笼统地把 MCU 换个更省电的型号。
电池寿命的估算公式简单到有点反常:
# 电池寿命估算:按平均电流折算,再乘实际可用系数 def battery_life_years(capacity_mah, avg_current_ua, derating=0.7): """ capacity_mah : 电池标称容量,CR2450 取 620 avg_current_ua: 整机平均电流,单位 uA derating : 实际可用系数,扣自放电、低温内阻上升、截止电压 """ hours = capacity_mah * 1000 / avg_current_ua # mAh -> uAh 再除以 uA 得小时 days = hours / 24 return hours, days, days / 365 * derating h, d, y = battery_life_years(620, 8.5) print(f"{h:.0f} 小时 / {d:.0f} 天 / 折算后约 {y:.1f} 年") # 输出:72941 小时 / 3039 天 / 折算后约 5.8 年这段脚本里,capacity_mah * 1000 / avg_current_ua是把 mAh 换算成 uAh 后直接除以 uA,量纲刚好落到小时。derating这一项是我加进去的,原始换算给出 8.32 年是理论值,实际产品要扣掉电池自放电、-30℃ 低温下内阻升高导致的截止电压提前到达、以及升压效率损失,按 0.7 折算比较稳妥,报 5.8 年比报 8.32 年更经得起追问。答辩或者评审时把两个数都写出来,说明白差在哪,比只报一个漂亮数字要可信得多。
3. 选型矩阵:ST7305 与 ST7306 的分辨率、色彩与面板匹配
3.1 两颗芯片的分辨率与色彩组合
ST7305 是入门版,ST7306 是主版本,两者共用同一套 ULP 驱动思路,区别在驱动能力和色彩深度上。把官方给的分辨率组合列出来,规律其实很清楚:
| 型号 | 单色 | 4 色 | 8 色 | 64 色 |
|---|---|---|---|---|
| ST7305 | 408 × 408 | 204 × 408 | — | — |
| ST7306 | 720 × 480 | 360 × 480 | 240 × 480 | 240 × 240 |
横向看 ST7306:单色 720×480,切到 4 色横向减半成 360×480,切到 8 色再降到 240×480,切到 64 色横向维持 240 而纵向减半到 240×240。纵向基本不动,横向随色深增加按比例收缩,这符合「驱动通道数固定、每像素位宽翻倍就要拿空间换」的基本规律。选型时不用去猜内部架构,直接按这个表倒推自己的需求就够了。
怎么选,我的判断顺序是这样的:如果显示内容只有文字和简单图标,且外壳是深色底配白字(电子价签最常见的形态),单色就够,优先 ST7305 的 408×408,方形屏在小尺寸标签上排版更从容。如果必须用红色标出促销价或告警状态,那就是 B/W/R 三色,落到 4 色档,ST7305 给 204×408,ST7306 给 360×480,后者更适合 2.9 英寸以上的标签。如果要做 8 色或 64 色的彩色图标、简易封面图,只有 ST7306 能接。
有一点必须提醒:色彩数和分辨率是绑死的,不能既要 64 色又要 720×480。见过有人在方案书里写「64 色 720×480 反射屏」,一查表就知道不成立,这种硬伤在评审现场很难圆回来。
3.2 反射式、透射反射式与背光的三选一
这两颗 IC 支持的面板类型有三类,选错面板,IC 再省电也白搭。
反射式(Reflective)面板靠环境光反射成像,完全没有背光,功耗最低,阳光下可读性最好,但进了暗光环境就是黑屏。电子价签、仓储标签、智能锁面板这类「装在灯光充足的室内或户外」的场景,反射式是首选,配合单色或 B/W/R 显示,整机 6.5uA 的数字就是这么来的。
透射反射式(Transflective)面板在像素里保留了一部分透光区,环境光强时走反射,环境光弱时开背光走透射,两头都能用。代价是背光一开,毫安级的电流立刻把微安预算冲垮,所以背光必须是「按键触发、几秒自动熄灭」的临时行为,不能常亮。带背光的可穿戴设备、户外仪表通常走这条路。
常规透射式(Transmissive)面板必须常开背光,1.3 英寸 262K 色模组 5mA 的典型值就是这么来的。它和 ULP 驱动方案基本不在一个赛道,硬凑在一起只能得到一个「省了驱动电、被背光吃光」的结果。
我的建议是把面板类型当成第一决策项,先定屏幕在什么光照下工作,再定 IC 型号和色彩深度,最后才谈分辨率和尺寸。反过来先定分辨率再找面板,十有八九会在光照适配上返工。
3.3 电源结构与外围器件清单
整机的电源结构比想象中简单:一颗纽扣电池经 FPC 直接挂到驱动 IC 的电源脚,MCU 与驱动 IC 共用同一路电源,天线或无线模块单独走。ST7305/ST7306 内部集成升压与电荷泵,面板所需的高压由 IC 自己产生,外部不用再摆一颗升压芯片——这对小尺寸模组是实打实的 BOM 收益。
外围器件主要就三类。第一类是去耦电容,紧贴 IC 电源脚放置,容量按手册推荐值取,不要为了省面积减容,脉冲突发电流全靠它兜。第二类是 FPC 上的走线,电源和地从连接器到 IC 尽量短而宽,源极驱动的瞬时电流路径上串一点寄生电感,波形就会振铃。第三类是 MCU 侧的接口电平,SPI 的片选和时钟线在不通信时要拉到确定电平,悬空是休眠电流超标最常见的来源。
宽温范围 -30~85℃ 这条指标,选外围器件时也要对齐。普通消费级电容在 -30℃ 容值掉得厉害,去耦失效后低温启动异常的概率明显上升;电池在低温下内阻翻倍,瞬时峰值电流会把电压拉到复位阈值以下。方案书里写 -30℃ 能工作,BOM 里却全是 0~70℃ 的料,这是典型的纸面指标。
4. 落地实现:从初始化序列到局部刷新的代码骨架
4.1 上电时序与初始化配置
上电顺序不对,屏幕会花、会闪、会偶发不亮。稳妥的顺序是:先给逻辑电源,等电压稳定,拉复位,再配置驱动参数,最后开显示。下面是配置骨架,寄存器名和位定义以对应型号的数据手册为准,这里体现的是顺序和逻辑关系:
/* 上电与初始化骨架:字段名以手册为准,此处只表达配置顺序 */ static int panel_init_ulp_mode(void) { /* 1. 复位:低电平保持时间按手册给的典型值,太短会导致配置丢失 */ lcd_reset_low(); delay_ms(RESET_HOLD_MS); lcd_reset_high(); delay_ms(RESET_WAIT_MS); /* 等内部电荷泵稳定后再通信 */ /* 2. 接口与扫描方向:先定数据格式,再定行列映射 */ lcd_write_cmd(CMD_IFACE_MODE); /* SPI 位宽、字节序 */ lcd_write_cmd(CMD_SCAN_DIR); /* 源极/栅极扫描方向,装在壳里后调会镜像 */ lcd_write_cmd(CMD_DATA_FORMAT); /* 单色 1bpp / 4 色 2bpp / 8 色 3bpp / 64 色 6bpp */ /* 3. 驱动模式:1Hz 帧周期 + On/Off 双模式,这是整机功耗的分水岭 */ lcd_write_cmd(CMD_FRAME_RATE); lcd_write_data(FRAME_1HZ); lcd_write_cmd(CMD_POWER_MODE); lcd_write_data(POWER_ON_OFF_MODE); /* 不用 AUTO,AUTO 会退回连续刷新 */ /* 4. 电荷泵与灰度:颜色越深,这里配置项越多 */ lcd_write_cmd(CMD_CHARGE_PUMP); lcd_write_data(cp_level_from_panel_spec()); lcd_apply_gray_lut(g_lut_table, LUT_LEN); /* 反射式面板 VT 无 Gamma,靠 LUT 校正 */ /* 5. 显示窗口与开屏 */ lcd_set_window(0, 0, PANEL_W - 1, PANEL_H - 1); lcd_write_cmd(CMD_DISPLAY_ON); return 0; }RESET_HOLD_MS和RESET_WAIT_MS两个延时不能省,也不能凭感觉给,手册里会给最小值,量产时按最小值乘以安全系数取。CMD_POWER_MODE这一步是整段代码里最关键的一行,配成自动模式会让 IC 在画面静止时仍然按内部节拍刷新,实测电流能高出十几倍,很多人第一次调试就是栽在这里。lcd_apply_gray_lut在单色场景可以直接跳过,但如果做 4 色以上而不做 LUT 校正,反射式面板看到的颜色会明显偏,红不像红、灰阶断层,这是反射式 + 无 Gamma 架构的固有特性,只能靠查表补。
扫描方向要在结构件装配前定死。屏幕旋转 180 度装进外壳后再改扫描方向,等于所有坐标映射重来一遍,还容易把局部刷新的窗口算错。
4.2 多色显示的数据组织与局部刷新
不同色彩深度对应的像素打包方式差别很大:单色 1bpp,一个字节塞 8 个像素;4 色 2bpp,一个字节 4 个;8 色 3bpp 最别扭,两个像素 6 位,剩下的位要靠跨字节拼;64 色 6bpp,一个字节装不下一个像素,得两个字节拼一个。下面这段把任意色深统一成位流,写进显存前不用关心边界对齐:
# 把像素索引列表打包成驱动 IC 需要的位流,适用于 1/2/3/6 bpp def pack_pixels(pixels, bpp): """pixels: 每像素的颜色索引;bpp: 每像素位数""" buf = bytearray() acc, bits = 0, 0 for p in pixels: acc = (acc << bpp) | (p & ((1 << bpp) - 1)) bits += bpp while bits >= 8: bits -= 8 buf.append((acc >> bits) & 0xFF) # 从高位开始取,MSB first if bits: # 末尾补零对齐字节 buf.append((acc << (8 - bits)) & 0xFF) return bytes(buf) # 单色 2.13 英寸 250x122,一行 250 像素 => 32 字节(末字节有空位) row = pack_pixels([0] * 250, 1) print(len(row)) # 32MSB first 还是 LSB first 取决于接口模式寄存器,顺序反了会得到整屏错位的雪花点,这类问题查半天不如直接把两种都试一遍。末尾补零对齐字节的写法,在 3bpp 下尤其重要——不补齐的话,下一行的起始位会整体偏移,表现为斜条纹。
局部刷新是 MCU 侧省电的核心手段。整屏写一次 250×122 单色是 3813 字节,走 SPI 按 1MHz 算要 30ms 左右;只更新一个 40×16 的数值区,是 80 字节,不到 1ms。结合前面算过的「唤醒时长 × 频率」,把每次唤醒从 30ms 压到 2ms,平均电流能差一个数量级。窗口设置就是把lcd_set_window(x0, y0, x1, y1)收敛到变化区域,然后只往这块区域灌数据,其余显存内容保持不变。
要注意的是,局部刷新之后如果长时间不整屏刷,残影会累积。我的习惯是每隔若干次局部刷新插一次整屏重写,间隔按面板特性和显示内容定,价签这种内容几乎不变的应用,一天一次整刷就够了。
4.3 功耗测量脚本与温区扫描
测量环节最忌讳拿万用表打一下瞬时值就当结论。UCT 类设备的平均电流在微安级,万用表量程和采样率都跟不上,看到的是跳动的数字。正确做法是用源表或高精度电流表串在电池正极,采样率不低于 10Hz,连续记录至少一个完整刷新周期(1 秒)的整数倍,最好跑 24 小时取平均。
# 用支持远端采样的源表记录整机电流,采样 10Hz,跑 24 小时 # 仪器地址、通道号按实际接线替换 smu --addr auto \ --function current \ --range 1e-3 \ --nplc 1 \ --interval 0.1 \ --duration 86400 \ --log current_24h.csv # 统计:去掉上电前 60 秒,避免浪涌拉高均值 python3 - <<'PY' import csv rows = list(csv.reader(open("current_24h.csv")))[60:] vals = [float(r[1]) for r in rows if r and r[1]] print(f"samples={len(vals)} avg={sum(vals)/len(vals)*1e6:.2f}uA " f"peak={max(vals)*1e6:.1f}uA") PY--nplc 1是积分时间参数,数值越大越稳但越慢,测微安级电流时不要低于 1。--duration 86400跑满一天,是为了把「每小时唤醒一次」这种低频事件也算进均值——只测 10 分钟的话,那些低频刷新根本没被采到,算出来的平均电流会偏乐观。
温度扫描是另一个必做项。把整机放进温箱,从 85℃ 降到 -30℃,每个温度点稳定 30 分钟后测平均电流和刷新是否正常。低温下 a-TFT 的载流子迁移率下降,1Hz 帧周期可能不够把一行充满,表现为对比度变差或局部发灰;这时候通常的做法是在低温区把帧率临时提到 2Hz 或 4Hz,用一点功耗换可读性,用温度传感器做分段切换。
5. 避坑清单:五个让实测电流翻倍的设计细节
5.1 平均电流达标但整机反复复位
现象:源表测出来的平均电流和预算表对得上,8.5uA 上下,但装进外壳跑两天,设备会莫名其妙重启,日志里看不到异常。原因不在平均值,在峰值。1Hz 模式下每次刷新是一个毫秒级的电流脉冲,峰值可能到毫安级,而纽扣电池的内阻在低温或电量下降后会明显升高,脉冲一来电压瞬间被拉到 MCU 的复位阈值以下。解决方式有三条:在电池正极就近加大容量去耦电容,把脉冲能量从电容取;把刷新窗口拆成几段,避免所有通道同时开;低温场景下适当降低刷新峰值或改用内阻更低的电池型号。判断方法很简单,用示波器看电池两端电压,刷新瞬间有没有一个几十毫伏的凹陷。
5.2 休眠电流比预算高一个数量级
现象:IC 和 MCU 都进了休眠,实测静态电流还是几十微安。原因通常是外围「不说话」的器件:SPI 的时钟和数据线悬空形成漏电通路、调试口没关、上拉电阻常挂、LDO 静态电流没算、电池分压采样电阻一直在耗电。排查方法是从电池正极开始逐段断开:先断面板 FPC,再断传感器,再断调试口,看电流在哪一步掉下来。设计阶段的对策是给每个 GPIO 定一个确定的休眠电平,分压采样电路加 MOS 开关,只在测量瞬间导通。
5.3 反射屏在暗光环境里读不出来
现象:样机在窗边效果很好,装到货架背光面或者地下车库就一片灰。原因是选型时只算了功耗没算光照条件,反射式面板完全依赖环境光,照度低于某个阈值就没有对比度。解决方式:要么换透射反射式面板并配临时背光(按键触发、几秒自灭),要么在方案阶段就明确使用场景的照度下限,把「必须装在灯光充足位置」写进安装规范。这一条不是技术问题,是需求边界问题,越早澄清越好。
5.4 低温下画面发灰、刷新不全
现象:常温测试全通过,-20℃ 下对比度明显下降,快速变化的区域有拖影。原因是低温下 a-TFT 的响应变慢,1Hz 帧周期内像素没被充分充电。解决方式是加温度补偿:板上放一颗精度够的温度传感器,按温度分段切换帧率和驱动电压,低温段把帧率提到 2~4Hz。补偿表要在温箱里实测出来,不能靠线性外推。
5.5 多色显示颜色偏差、灰阶断层
现象:4 色或 8 色模式下,红色偏橙、深灰和黑分不清。原因是反射式面板没有 Gamma 校正电路,IC 给的驱动电压和实际反射率不是线性关系。解决方式是做 LUT 查表校正:先用标准色卡或分光测色计测出各灰阶的实际反射率,反算出一张映射表烧进 IC,再用同一套光照条件复测。换面板供应商或换批次时这张表要重新校,直接沿用旧表是最常见的翻车点。
6. 验收与答辩:怎么证明八年寿命不是纸面算术
验收这件事,评委或甲方真正想确认的不是「你有没有算对」,而是「你知不知道自己哪里算得不准」。所以验收材料要按「预算—实测—差异解释」三段来组织,缺最后一段,前面两段都站不住。
先立一张验收指标表,把可测项和判据写死:
| 验收项 | 判据 | 测量手段 |
|---|---|---|
| 整机平均电流 | ≤ 10uA @ 25℃ | 源表串联电池,24h 平均 |
| 刷新峰值电流 | ≤ 设计上限,且电池电压凹陷 < 100mV | 示波器差分探头 |
| 帧率与模式 | 1Hz On/Off 生效,波形为窄脉冲 | 电流波形观察 |
| 工作温区 | -30~85℃ 全温段可读 | 温箱分段测试 |
| 色彩准确性 | 各灰阶反射率偏差在约定范围内 | 分光测色计 + LUT 复测 |
| 电池寿命 | 折算后 ≥ 目标年限 × 0.7 | 预算表 + 加速验证 |
加速验证的做法是把刷新频率人为提高若干倍,测平均电流是否随之线性上升,用这条曲线反推 1Hz 时的基线电流,再和直接测量值对照。两者吻合,说明你的功耗模型是可信的;差得多,说明有某个随频率变化的项没被建模,比如电荷泵的开关损耗或者 MCU 唤醒的固定开销。
答辩现场最容易被追问的三个点是:为什么是 8.5uA 而不是 6.5uA、为什么折算系数取 0.7、低温下帧率提高后寿命怎么变。前两个问题前面都算过了,第三个要提前准备好数据——低温段如果按 4Hz 跑,功耗大约翻几倍,但低温通常只占全年时间的一小部分,可以按时间加权给出一个全年平均电流。把这张加权表贴在答辩 PPT 里,比任何口头解释都有说服力。
还有个小技巧:把电流波形和时序图截成一张图放在一页里,左边是 60Hz 连续刷新的波形,右边是 1Hz On/Off 的波形,两张图放一起,不用讲原理,看的人自己就懂了。这比堆十页公式有效。
我最早做这类低功耗模组的时候,交付前只跑了常温 10 分钟的平均电流,数据漂亮,客户装到户外设备上第一个冬天就批量出问题——低温下电池内阻上升导致复位,回来返修了一整批。从那以后我每次出方案,都强制走一遍「全温段 × 24 小时 × 峰值与均值双测」的流程,哪怕项目周期再紧,这三项也不砍。功耗这东西,纸面上省下来的每一微安,最后都得靠实测签字。希望这套拆法能帮到你。
本文还有配套的精品资源,点击获取