← Back · anthropic-design diagram gallery← 返回 · anthropic-design 图示案例库 hardware · panel bring-up硬件 · 屏的点亮

Twelve layers.
Thirty conductors.
One order you cannot change.
十二层玻璃。
三十根线。
一个不能换的顺序。

The data-path page starts after the panel already works. This one is about everything before that: what is physically inside the module, how it is wired, the order its supplies have to come up in, and — when the screen stays dark — which command to run at which block. Four figures, one small-panel module.数据通路那一页,是从屏已经能亮之后讲起的。这一页讲之前的事:模组里面物理上有什么、怎么接线、供电必须按什么顺序上来,以及屏一直不亮的时候,在哪一块敲哪条命令。四张图,一块小尺寸屏模组。

12layers between your finger and the backlight手指和背光之间隔着的层数
30conductors on the flex, ten of them pairedFPC 上的导线,其中十根是成对的
120 msminimum from sleep-out to backlight on从退出睡眠到点亮背光的最小间隔
what is checked and what is representative哪些是查过的,哪些是示意

Every kernel path named on this page was read out of a real tree — Linux 4.14.139 — and carries a file and a line number in the last section. The panel is a representative small-panel module: the layer count, the pin assignment and the timing minima are typical of that class of part rather than a specific product, and each figure says so on its face. Measure your own stack and read your own datasheet before quoting any number here.这一页提到的每一条内核路径,都是从一棵真实的树里读出来的 —— Linux 4.14.139 —— 最后一节逐条附文件和行号。屏本身是一块有代表性的小尺寸模组:层数、引脚分配、时序下限都是这一类器件的典型值,不是某个具体型号,每张图上也都写明了这一点。要引用这里任何一个数字之前,先量自己的叠层、读自己那块屏的规格书。

A panel is not a sheet of glass. It is twelve layers, and one of them answers to two subsystems.屏不是一块玻璃,是十二层,其中一层同时归两个子系统管。

A block diagram will tell you the display controller talks to the panel. It will not tell you that between the glass you touch and the light you see there are twelve distinct materials, that two of them are adhesive and cure once, or that the layer carrying the pixel transistors also carries the electrode the touch controller transmits on. That last one is not a curiosity. It is the reason a display-side stall can take touch down with it while every touch register still reads back normal — and no block diagram can show it, because at that level the two subsystems look completely separate.框图会告诉你显示控制器连着屏。它不会告诉你:你手指碰到的玻璃和你看到的光之间隔着十二种不同的材料,其中两层是胶、固化一次就回不去,以及承载像素晶体管的那一层,同时也承载着触摸控制器发射用的电极。最后这件事不是冷知识。它就是「显示侧一卡,触摸跟着停,而触摸寄存器读回来全是正常值」的原因 —— 而任何框图都画不出来,因为在框图那个层次上,这两个子系统看起来完全是分开的。

CROSS-SECTION · WHAT IS TOUCHING WHAT, AND HOW THICK PLAN VIEW · WHERE THE CUT IS TAKEN active area A A the arrows say which way you are looking — a section line without them is ambiguous SECTION A—A · 12 LAYERS, RELATIVE THICKNESS LED cover glass · 0.55 mm optical adhesive · 150 µm upper polariser colour-filter glass · 0.20 mm liquid-crystal layer · 3.5 µm TFT glass · transistors + one shared conductor lower polariser air gap · not a mistake, it is optical diffuser light guide plate · 0.40 mm reflector metal frame the flex that carries signals out leaves from the TFT glass — the colour-filter glass carries nothing out DETAIL · THAT ONE LAYER AT 40× one continuous conductor strip display calls it Vcom · common electrode touch calls it TX · transmit electrode same piece of metal, time-shared pixel transistors sit underneath, on the same glass consequence: stall the display side and touch stops too — while every touch register still reads back perfectly normal. 1 2 3 glass film adhesive active silicon what this figure is about hatched = cut through solid material ① the plan view carries the section line, so the reader knows where the cut was taken and which way they are facing · ② every thin band is named outside, on a leader ③ the detail panel is joined to its origin by two lines, not one — one line reads as an arrow pointing somewhere, two read as “this region, blown up”. thicknesses are typical for a small-panel module and are drawn to relative, not absolute, scale — measure your own stack before quoting any of them. Cross-section · panel stack
the module, cut open把模组切开 A section is only readable when the reader knows where the cut was taken, so the plan view carries the line and the two arrows that fix the viewing direction. Twelve bands cannot hold text, so every name is on a leader outside. The dashed box on the TFT glass reaches the detail panel by two lines rather than one — one line reads as an arrow pointing somewhere, two read as “this region, blown up”.剖面图只有在读者知道「从哪儿切的」时才读得懂,所以平面图上要画剖切线,还要有两个箭头把「朝哪边看」定死。十二条带子里塞不下文字,所以名字全部用引线引到外面。TFT 玻璃上那个虚线框用两条线连到放大面板,不是一条 —— 一条读起来是「指向某处的箭头」,两条才读成「这一块,放大」。
the layer that matters要盯住的那一层

One piece of metal, two jobs, time-shared同一片金属,两个岗位,分时轮着用

On a panel with touch integrated into the display, the common electrode the display drives and the transmit electrode the touch scan drives are the same conductor. They take turns. So the failure that catches people is not “touch is broken” — it is that touch went quiet because the display half stopped handing the line over, and every register on the touch side still reads exactly as it should. If you are chasing a touch problem and the display side has any complaint at all, settle the display side first.触摸做进显示里的屏,显示驱动的公共电极和触摸扫描的发射电极是同一根导体,两边轮流用。所以真正咬人的故障不是「触摸坏了」,而是显示那一半不再交出这根线,触摸就跟着安静了 —— 而触摸侧每一个寄存器读回来都完全正常。查触摸问题的时候,只要显示侧有任何异常,先把显示侧弄清楚。

Thirty conductors — and which end is pin 1 depends on which face you are looking at.三十根线 —— 而哪一头是 1 脚,取决于你从哪一面看。

A pinout has to be two things at once: the row of pads drawn the way the part is actually built, and the table of what each one carries. A table on its own cannot be checked against the part in your hand. A strip on its own does not tell you what any pad is. And the mistake that costs a board is neither — it is that the drawing was made from the component side and read from the pad side, which mirrors it end to end.引脚图必须同时是两样东西:按实物真实排法画出来的那一排焊盘,和「每一根是什么」的表。光有表,没法拿实物对着核;光有排布图,不知道每根是什么。而真正会烧板子的错误两者都不是 —— 是图从元件面画、人从焊盘面读,左右整个镜像了。

PINOUT · 30-WAY PANEL FLEX, AS THE PART IS ACTUALLY BUILT the strip is the physical row of pads; the table below is what each one carries. one without the other is not a pinout. D3 D2 CLK D1 D0 pin 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 WHAT EACH PAD CARRIES 1 GND 2 VLED- backlight cathode 3 VLED- doubled for current 4 VLED+ backlight anode 5 VLED+ doubled for current 6 GND 7 D3N lane 3 8 D3P lane 3 9 GND pair shield 10 D2N lane 2 11 D2P lane 2 12 GND pair shield 13 CLKN clock 14 CLKP clock 15 GND pair shield 16 D1N lane 1 17 D1P lane 1 18 GND pair shield 19 D0N lane 0 20 D0P lane 0 21 GND pair shield 22 TE tearing effect, panel to host 23 RESET active low 24 IOVCC 1.8 V logic 25 IOVCC doubled 26 VSP +5.5 V analogue 27 VSN -5.5 V analogue 28 SCL I2C to the touch controller 29 SDA I2C to the touch controller 30 GND the trap this figure exists to prevent left and right depend on which face you are looking at. seen from the component side, this connector is the mirror of itself seen from the pad side. so a pinout is only usable when it states the viewing side and marks pin 1 — and the part itself has to carry that mark too, or the drawing cannot be checked. ground power rail differential pair control / I2C bracket · the two halves of one differential pair the pairs are bracketed, not merely listed. a pair split across two table rows reads as two independent pins — and routing them that way is how a lane fails at the far end of the flex. the grounds sitting between pairs are shields, not spare grounds — reassigning one of them to something else changes the impedance of the pair next to it. this is an example arrangement, not a part number. the panel datasheet is the authority for any board you are actually building. Pinout · panel flex connector
the flex, pad by padFPC,一个焊盘一个焊盘地看 Differential pairs get a bracket rather than two neighbouring table rows, because a pair read as two independent pins gets routed as two independent pins — and that fails at the far end of a long flex, not at the connector where you would look for it. The grounds sitting between pairs are shields; reassigning one changes the impedance of the pair beside it.差分对用括号括起来,而不是并排两行表格 —— 一对被读成两根独立的脚,就会被当成两根独立的脚去布线,然后在长 FPC 的远端出问题,而不是在你会去看的连接器那一头。对与对之间的地是屏蔽,不是备用地;把其中一根挪去接别的信号,旁边那一对的阻抗就变了。
the pair is drawn as two rows in a table一对差分线在表里写成上下两行
Then nothing on the page says they belong together, and the next person to touch the layout has no reason to keep them the same length. Bracket them in the figure so the pairing survives being read by someone who was not in the conversation.那么页面上就没有任何东西说它们是一对,下一个动布线的人也就没有理由让它们等长。在图上用括号把它们括起来,这样即使读图的人没参与过当时的讨论,配对关系也还在。
the drawing does not say which face图上没写从哪一面看
Then it is not a pinout, it is a coin flip. State the viewing side in words on the figure, mark pin 1, and say what carries that mark on the real part — a silkscreen triangle or a chamfered corner — so the drawing can be checked against the thing.那它就不是引脚图,是抛硬币。在图上用文字写清从哪一面看,标出 1 脚,并写明实物上靠什么认这个 1 脚 —— 丝印三角还是切角 —— 这样图才能拿去跟实物核对。
a ground between two pairs gets reused对与对之间的地被挪去做别的用
It was not spare. It was the return path keeping the pair either side of it at the impedance it was designed for. Losing it does not produce a clean failure; it produces a link that works on the bench and fails on a longer cable or a hotter day.那根地不是多出来的,它是回流路径,靠它两边那对线才维持在设计的阻抗上。丢了它不会干脆地坏掉,而是变成「实验室能跑、换根长线或者天热一点就不行」。

Powering up is not switching on. It is a sequence with minimum gaps.上电不是「通电」,是一串带最小间隔的动作。

Four supplies, a reference clock, a reset line and a backlight — and the only thing that makes them a panel rather than a pile of rails is the order and the waiting. Each gap in the figure has a number on it, and each number is there because something visible happens when you take it away: a panel that never lights, a white flash at boot, or an image that lingers for a second after power-down. Bring-up bugs cluster here because the sequence is split across two driver callbacks, and it is easy to move one step across that boundary without noticing.四路电源、一个参考时钟、一根复位、一路背光 —— 让它们成为一块屏而不是一堆电源轨的,只有顺序和等待。图上每一段间隔都标了数字,而每个数字之所以在那儿,是因为拿掉它就会看见后果:屏根本不亮、开机闪一下白、或者断电后画面还残留一秒。点亮阶段的问题集中在这里,因为这个顺序被拆在两个驱动回调里,很容易在没察觉的情况下把某一步挪过了边界。

PANEL POWER SEQUENCE · RAILS, RESET, COMMANDS, BACKLIGHT not to scale · the brackets carry the real numbers panel_funcs->prepare() enable() owned by VCC_IO 1.8 V · always first VCC_3V3 3.3 V panel supply VDD_MIPI D-PHY rail REFCLK 24 MHz RESET_N active low DSI link lane state undriven LP-11 · ready for commands DCS init sequence init seq on BL_EN PWM + enable t1 ≥ 10 ms · supplies stable → reset release t2 ≥ 10 µs t3 ≥ 5 ms · reset → first DCS t4 ≥ 120 ms · sleep-out → backlight REFCLK must already be running when reset rises, or the panel latches its state from a clock that is not there. Power-down is the exact reverse of this figure, every step. Each broken constraint has its own bench symptom: t1 short → panel never answers; t3 short → the init sequence is swallowed; t4 short → a white flash at every boot — the one people ship.
the order, and what each gap buys顺序,以及每一段间隔换来了什么 A datasheet-style timing figure, not to scale, with the driver callback that owns each stretch drawn above it. The brackets carry the four numbers that decide whether the panel comes up at all. Power-down is this figure read backwards — not “cut the rails”, but the exact reverse order.一张规格书式的时序图,不按比例,上方画出每一段归哪个驱动回调管。四个括号里是决定这块屏能不能起来的四个数字。断电就是把这张图倒着读一遍 —— 不是「把电断掉」,而是严格的反序。
reset is released before the supplies are stable电源还没稳就放开了复位
The panel controller latches configuration at the moment reset goes high. Release it early and it latches from a rail that is still moving — which afterwards does not read as a power problem at all. It reads as a panel that ignores half its initialisation commands.屏的控制器是在复位拉高的那一刻锁存配置的。放早了,它就从一条还在变的电源轨上锁,而这件事事后完全不像电源问题 —— 它表现成「这块屏有一半初始化命令不认」。
the backlight comes on with the display背光跟显示一起开
Then the first thing anybody sees is whatever was left in the panel RAM, which is where a white flash at boot comes from. The wait between sleep-out and backlight is what buys a first frame to show. It is the longest gap in the figure and the one most often shortened to make boot look faster.那么大家看到的第一样东西,就是屏内存里上次剩下的内容,这就是开机闪白的来源。退出睡眠到点亮背光之间的等待,买的就是「有一帧可显示」。它是图里最长的一段,也是最常被为了让开机看起来快一点而缩短的一段。
power-down is not the exact reverse断电不是严格的反序
Charge left on the panel is what makes an image sit on the glass after the system is off, and the reverse order is what drains it. This is the one constraint with no error message attached — the only report you will get is a user saying the screen “stays on for a moment”.屏上残留的电荷,就是系统已经关了画面还留在玻璃上的原因,而反序断电正是把它放掉的过程。这条约束完全没有任何报错 —— 你能拿到的唯一反馈,是用户说「屏幕关了还亮一下」。

When it stays dark, prove the previous stage produced something.屏一直不亮的时候,先证明上一站真的有输出。

An architecture diagram leaves you knowing the shape of the system and still not knowing what to type. So this one pins the exact path under every block, and colours it by consequence rather than by category: green only reads, gold changes hardware or kernel state. Nobody arrives at a bring-up session holding a block diagram — they arrive holding a symptom, which is why the left column, not the architecture, is the entry point.架构图能让你知道系统长什么样,但还是不知道该敲什么。所以这张图把具体路径钉在每一块下面,并且按后果上色,不按类别上色:绿色只读,金色会改硬件或内核状态。没有人是捧着框图进点亮现场的,进来时手里拿的是一个现象 —— 所以入口是左边那一列,不是架构本身。

DEBUG MAP · EVERY BLOCK CARRIES THE COMMAND THAT LOOKS INSIDE IT START FROM WHAT YOU SEE backlight on, screen black pixels are not arriving → start at the display controller backlight off too nothing is powered → start at regulators, then gpio device node missing the driver never bound → start at probe deferred boots, then stops an interrupt never came → start at interrupts image torn or shifted timing, not content → start at the clock tree the rule this map exists to serve prove a stage received its input before you suspect that stage. half of “the driver is broken” turns out to be a clock that was never enabled. DISPLAY PATH display controller reads the framebuffer, drives timing /sys/kernel/debug/dri/0/state read connector · DSI-1 is the panel even enabled /sys/class/drm/card0-DSI-1/enabled read buffers handed around who allocated, who still holds it /sys/kernel/debug/dma_buf/bufinfo read driver chatter, live turn one file's debug prints on dynamic_debug/control ← +p writes PLATFORM SERVICES · CLOCK, POWER, PINS clock tree is the pixel clock running at all /sys/kernel/debug/clk/clk_summary read regulators which rails are on, and who asked regulator/regulator_summary read pin multiplexing is the pin still a GPIO pinctrl/*/pinmux-pins read gpio lines direction and level, per line /sys/kernel/debug/gpio read INTERRUPTS AND BINDING interrupts is the count going up, on which CPU /proc/interrupts read did the driver bind the symlink exists only once it did /sys/bus/platform/devices/<dev>/driver read green pill · only reads, safe to run on a live board gold pill · changes hardware or kernel state an architecture diagram that does not say how to observe each block leaves the reader knowing the shape of the system and still not knowing what to type. read-only and state-changing commands are told apart on the figure itself, because the difference matters most at 2am on someone else’s board. paths under /sys/kernel/debug exist only where debugfs is mounted and the matching kernel options were built in — a missing file is not proof the block is idle. Debug map · commands on blocks
a command on every block每一块上都挂着一条命令 The rule the map exists to serve is in the box on the left: prove a stage received its input before you suspect that stage. Half of “the driver is broken” turns out to be a clock that was never enabled — and the clock has its own line in this figure precisely so that checking it costs one command instead of an afternoon.这张图存在的理由写在左下角那个框里:先证明这一段收到了输入,再怀疑这一段坏了。「驱动坏了」有一半最后查出来是某个时钟根本没使能 —— 而时钟在这张图里单独有一行,就是为了让「查一下」的代价是一条命令,不是一个下午。
before you trust an empty file把空文件当结论之前

A missing debugfs file is not proof the block is idledebugfs 里少一个文件,不等于那一块没在工作

Everything under /sys/kernel/debug exists only where debugfs is mounted and the matching kernel option was built in. On a lean product config half of these paths are simply absent, and reading that absence as “nothing is happening here” sends people down the wrong branch for hours. Check the option before you check the file./sys/kernel/debug 下面的东西,只有在挂了 debugfs 且编进了对应内核选项时才存在。产品配置精简过之后,这些路径有一半根本不在,而把「不在」读成「这里什么都没发生」,能让人在错误的分支上待好几个小时。先确认选项,再去看文件。

Every kernel path on this page, with the line it came from这一页出现的每一条内核路径,附出处

Read out of Linux 4.14.139. Line numbers move between versions; the point of listing them is that each claim was checked against a tree rather than recalled, and that you can run the same check on yours.全部从 Linux 4.14.139 里读出来。行号会随版本变;列出来的意义是:每一条都是对着一棵树查过的,不是凭印象写的,而且你可以在自己的树上跑同一次检查。

/proc/interrupts/proc/interrupts
fs/proc/interrupts.c:51 — created by proc_create("interrupts", …).fs/proc/interrupts.c:51 —— 由 proc_create("interrupts", …) 建立。
clk_summaryclk_summary
drivers/clk/clk.c:2307debugfs_create_file("clk_summary", …).drivers/clk/clk.c:2307 —— debugfs_create_file("clk_summary", …)
regulator_summaryregulator_summary
drivers/regulator/core.c:4495.drivers/regulator/core.c:4495
pinmux-pinspinmux-pins
drivers/pinctrl/pinmux.c:680.drivers/pinctrl/pinmux.c:680
the gpio debugfs filegpio 那个 debugfs 文件
drivers/gpio/gpiolib.c:3794.drivers/gpio/gpiolib.c:3794
dma_buf/bufinfodma_buf/bufinfo
drivers/dma-buf/dma-buf.c:1169.drivers/dma-buf/dma-buf.c:1169
the DRM atomic state fileDRM 原子状态文件
drivers/gpu/drm/drm_atomic.c:1815 — the state entry in the DRM debugfs list.drivers/gpu/drm/drm_atomic.c:1815 —— DRM debugfs 列表里的 state 一项。
the connector enabled attribute连接器的 enabled 属性
drivers/gpu/drm/drm_sysfs.c:233DEVICE_ATTR_RO(enabled).drivers/gpu/drm/drm_sysfs.c:233 —— DEVICE_ATTR_RO(enabled)
dynamic_debug/controldynamic_debug/control
lib/dynamic_debug.c:967 — the only gold pill on the figure, because writing to it changes kernel state.lib/dynamic_debug.c:967 —— 图上唯一一颗金色药丸,因为往里写会改内核状态。
the driver symlinkdriver 这个符号链接
drivers/base/dd.c:303sysfs_create_link(&dev->kobj, …, "driver"), created only when the bind succeeds, which is why its absence answers “did it bind”.drivers/base/dd.c:303 —— sysfs_create_link(&dev->kobj, …, "driver"),只有绑定成功才建立,所以「它在不在」正好回答「绑上了没有」。
prepare and enableprepare 和 enable
include/drm/drm_panel.h:37-70 — the header states that .prepare() turns the panel on and .enable() typically turns on the backlight. That is the boundary the power sequence is split across.include/drm/drm_panel.h:37-70 —— 头文件里写明 .prepare() 负责把屏打开、.enable() 通常负责点背光。上电时序正是被这条边界切成两半的。
one path deliberately not used有一条路径是特意没用的

The deferred-probe file is not in this treedeferred-probe 那个文件不在这棵树里

An earlier draft of the debug map carried /sys/kernel/debug/devices_deferred. Grepping 4.14.139 found nothing — that file arrived in a later kernel. Rather than ship a path that cannot be checked here, the figure asks the question a different way: the driver symlink under a device exists only after the bind succeeded, and that holds in every tree.这张图的早先一版写的是 /sys/kernel/debug/devices_deferred。在 4.14.139 上 grep 什么都没有 —— 那个文件是后来的内核才加的。与其发一条在这里核不了的路径,不如换个问法:设备目录下的 driver 符号链接只有在绑定成功之后才存在,而这一点在任何一棵树上都成立。