tirtc-device-builder 0.10.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +9 -0
- package/package.json +1 -1
- package/skills/tirtc-esp32-builder/SKILL.md +4 -0
- package/skills/tirtc-esp32-builder/VERSION +1 -1
- package/skills/tirtc-esp32-builder/knowledge/board-registry.json +62 -0
- package/skills/tirtc-esp32-builder/knowledge/waveshare-esp32-p4-wifi6-touch-lcd-4.3-c/knowledge.md +68 -0
- package/skills/tirtc-esp32-builder/references/display-pipeline.md +61 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
This project follows Semantic Versioning.
|
|
4
4
|
|
|
5
|
+
## 0.10.1
|
|
6
|
+
|
|
7
|
+
- Add a knowledge-only Waveshare ESP32-P4-WIFI6-Touch-LCD-4.3-C V1.0 package
|
|
8
|
+
with artifact-bound ST7701 display, GT911 touch and ES7210 TDM/AEC lessons.
|
|
9
|
+
- Add RAM-less DSI display guidance covering safe initial back-buffer selection,
|
|
10
|
+
VSYNC ownership, partial-refresh damage carry-forward, LVGL software rotation,
|
|
11
|
+
RGB565 byte order, touch mapping and runtime display-size scaling.
|
|
12
|
+
- Test exact 4.3-C registry matching while keeping adapter reuse disabled.
|
|
13
|
+
|
|
5
14
|
## 0.10.0
|
|
6
15
|
|
|
7
16
|
- Align the Kit's provisioning and device-binding implementation with the
|
package/package.json
CHANGED
|
@@ -53,6 +53,10 @@ the user's business baseline separately from the hardware reference.
|
|
|
53
53
|
For video orientation, unexpected cropping, or WeChat display-profile changes,
|
|
54
54
|
read [video-orientation.md](references/video-orientation.md) before changing
|
|
55
55
|
pixel transforms or UI angles.
|
|
56
|
+
For device-panel tearing, flicker, stale regions, wrong colors, display rotation
|
|
57
|
+
or touch-coordinate mismatch, read
|
|
58
|
+
[display-pipeline.md](references/display-pipeline.md) before changing the panel,
|
|
59
|
+
LVGL or framebuffer path.
|
|
56
60
|
|
|
57
61
|
## 3. Prove the business flows before board porting
|
|
58
62
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.10.
|
|
1
|
+
0.10.1
|
|
@@ -38,6 +38,68 @@
|
|
|
38
38
|
}
|
|
39
39
|
]
|
|
40
40
|
},
|
|
41
|
+
{
|
|
42
|
+
"package_id": "waveshare_esp32p4_wifi6_touch_lcd_43c_v1_0",
|
|
43
|
+
"status": "knowledge_only",
|
|
44
|
+
"identity": {
|
|
45
|
+
"vendor": "Waveshare",
|
|
46
|
+
"model": "ESP32-P4-WIFI6-Touch-LCD-4.3-C",
|
|
47
|
+
"aliases": ["Waveshare ESP32-P4-WIFI6-Touch-LCD-4.3-C", "微雪 ESP32-P4-WIFI6-Touch-LCD-4.3-C", "ESP32-P4-WIFI6-Touch-LCD-4.3-C (SKU 33875)"],
|
|
48
|
+
"hardware_revision": "V1.0",
|
|
49
|
+
"target": "esp32p4",
|
|
50
|
+
"module": "ESP32-P4NRW32 + ESP32-C6-MINI-1-N4",
|
|
51
|
+
"flash_mb": 32,
|
|
52
|
+
"psram_mb": 32,
|
|
53
|
+
"components": [
|
|
54
|
+
{"kind": "camera", "model": "OV5647"},
|
|
55
|
+
{"kind": "audio_input", "model": "ES7210"},
|
|
56
|
+
{"kind": "audio_output", "model": "ES8311"},
|
|
57
|
+
{"kind": "display", "model": "ST7701"},
|
|
58
|
+
{"kind": "touch", "model": "GT911"},
|
|
59
|
+
{"kind": "network", "model": "ESP32-C6-MINI-1-N4"}
|
|
60
|
+
],
|
|
61
|
+
"probes": [
|
|
62
|
+
{"kind": "camera_pid", "value": "0x5647", "required_for_exact": true},
|
|
63
|
+
{"kind": "touch_id", "value": "911", "required_for_exact": true},
|
|
64
|
+
{"kind": "es7210_i2c_7bit", "value": "0x40", "required_for_exact": true}
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"compatibility": {"idf": "5.5.4", "tirtc_sdk": "2.3.0-P4-validation-rebuild"},
|
|
68
|
+
"artifacts": {},
|
|
69
|
+
"knowledge_refs": ["waveshare-esp32-p4-wifi6-touch-lcd-4.3-c/knowledge.md"],
|
|
70
|
+
"lessons": [
|
|
71
|
+
{
|
|
72
|
+
"id": "waveshare_43c_dsi_partial_double_buffer",
|
|
73
|
+
"scope": "component",
|
|
74
|
+
"subject": "display:ST7701 partial double buffering",
|
|
75
|
+
"guidance": "For a RAM-less DSI panel, synchronize presented damage into the recycled back buffer after VSYNC and select a back buffer that is not initially scanned; allocating two buffers alone does not prevent tearing or stale regions.",
|
|
76
|
+
"action": "require",
|
|
77
|
+
"verification": "hil_verified",
|
|
78
|
+
"applies_to": {"kind": "display", "model": "ST7701"},
|
|
79
|
+
"evidence": [{"board_package_id": "waveshare_esp32p4_wifi6_touch_lcd_43c_v1_0", "source_ref": "waveshare-esp32-p4-wifi6-touch-lcd-4.3-c/knowledge.md#display-failures-and-resolution", "artifact_sha256": "2fb05d6985401b061ef3778f69b2f2b68a3d43cb6e7af145484d136de1ae2562"}]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "waveshare_43c_display_orientation_color_touch",
|
|
83
|
+
"scope": "board",
|
|
84
|
+
"subject": "LVGL display orientation, RGB565 and touch",
|
|
85
|
+
"guidance": "For the verified V1.0 enclosure use LVGL 8.3 sw_rotate with ROT_90, one RGB565 byte swap when LV_COLOR_16_SWAP is enabled, and native GT911 coordinates so LVGL rotates touch with the display.",
|
|
86
|
+
"action": "prefer",
|
|
87
|
+
"verification": "hil_verified",
|
|
88
|
+
"applies_to": {"package_id": "waveshare_esp32p4_wifi6_touch_lcd_43c_v1_0"},
|
|
89
|
+
"evidence": [{"board_package_id": "waveshare_esp32p4_wifi6_touch_lcd_43c_v1_0", "source_ref": "waveshare-esp32-p4-wifi6-touch-lcd-4.3-c/knowledge.md#display-failures-and-resolution", "artifact_sha256": "2fb05d6985401b061ef3778f69b2f2b68a3d43cb6e7af145484d136de1ae2562"}]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "waveshare_43c_es7210_address_slots",
|
|
93
|
+
"scope": "board",
|
|
94
|
+
"subject": "ES7210 address, TDM slots and AEC reference",
|
|
95
|
+
"guidance": "Probe 7-bit address 0x40, convert to the selected codec abstraction's 8-bit address form, and map compact DMA [MIC3 reference, MIC2 microphone] into the AEC microphone/reference contract.",
|
|
96
|
+
"action": "require",
|
|
97
|
+
"verification": "corroborated",
|
|
98
|
+
"applies_to": {"package_id": "waveshare_esp32p4_wifi6_touch_lcd_43c_v1_0"},
|
|
99
|
+
"evidence": [{"board_package_id": "waveshare_esp32p4_wifi6_touch_lcd_43c_v1_0", "source_ref": "waveshare-esp32-p4-wifi6-touch-lcd-4.3-c/knowledge.md#hardware-facts"}]
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
},
|
|
41
103
|
{"package_id":"lckfb_szpi_esp32s3_v1_0_1","status":"knowledge_only","identity":{"vendor":"深圳嘉立创科技集团股份有限公司(立创开发板)","model":"立创·实战派 ESP32-S3 开发板","aliases":["LCKFB SZPI ESP32-S3"],"hardware_revision":"V1.0.1","target":"esp32s3","module":"ESP32-S3 module","flash_mb":16,"psram_mb":8,"components":[{"kind":"camera","model":"GC2145"},{"kind":"aec_reference","model":"ES7210 MIC3 hardware reference"}],"probes":[]},"compatibility":{"idf":"5.5.4","tirtc_sdk":"2.3.0"},"artifacts":{},"lessons":[]},
|
|
42
104
|
{"package_id":"alientek_atk_dnesp32s3_v1","status":"knowledge_only","identity":{"vendor":"正点原子 (ALIENTEK)","model":"ATK-DNESP32S3","aliases":[],"hardware_revision":"V1.0","target":"esp32s3","module":"ATK-MWS3S","flash_mb":16,"psram_mb":8,"components":[{"kind":"camera","model":"OV5640 PID 0x5640"},{"kind":"audio_codec","model":"ES8388"}],"probes":[]},"compatibility":{"idf":"5.5.4","tirtc_sdk":"2.3.0"},"artifacts":{},"lessons":[]}
|
|
43
105
|
]
|
package/skills/tirtc-esp32-builder/knowledge/waveshare-esp32-p4-wifi6-touch-lcd-4.3-c/knowledge.md
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Waveshare ESP32-P4-WIFI6-Touch-LCD-4.3-C V1.0
|
|
2
|
+
|
|
3
|
+
Knowledge only. Exact board declared as Waveshare SKU 33875, PCB V1.0, with
|
|
4
|
+
OV5647 installed. The verified product artifact is XiaoTai `43c-port.10`, built
|
|
5
|
+
with ESP-IDF 5.5.4 and the TiRTC P4 2.3.0 validation archive. This package
|
|
6
|
+
records board and component lessons; it does not ship an adapter or authorize
|
|
7
|
+
reuse on another 4.3-inch revision.
|
|
8
|
+
|
|
9
|
+
## Hardware facts
|
|
10
|
+
|
|
11
|
+
- ESP32-P4NRW32 with 32 MiB PSRAM, 32 MiB flash and ESP32-C6-MINI-1-N4 Hosted
|
|
12
|
+
Wi-Fi over SDIO (CLK18/CMD19/D0..3=14..17/RST54).
|
|
13
|
+
- ST7701 MIPI-DSI, two lanes at 500 Mbps, native portrait 480x800, RGB565,
|
|
14
|
+
DPI 30 MHz, DSI PHY LDO_VO3 at 2.5 V, backlight GPIO26 inverted and reset27.
|
|
15
|
+
- GT911 at I2C 0x5D, native portrait coordinates, RST/INT not connected; polling
|
|
16
|
+
worked. OV5647 CSI two-lane PID 0x5647 shares I2C1 SDA7/SCL8.
|
|
17
|
+
- ES8311 DAC at 7-bit 0x18 and ES7210 ADC at **7-bit 0x40**, PA GPIO53. Both
|
|
18
|
+
share I2S1 MCLK13/BCLK12/WS10/DOUT9/DIN11. The codec abstraction used by this
|
|
19
|
+
port accepts the ES7210 control address in 8-bit form, so pass `0x40 << 1`.
|
|
20
|
+
- ES7210 serial order is CH1/CH3/CH2/CH4. The selected compact DMA pair is
|
|
21
|
+
`[MIC3 playback reference, MIC2 onboard microphone]`; swap it to the AEC
|
|
22
|
+
contract `[microphone, reference]`. ES8311 OUTN is physically fed to MIC3.
|
|
23
|
+
- Product key K2 is GPIO23. K1/POWER GPIO21 participates in the PMIC/power path
|
|
24
|
+
and needs separate short/long-press HIL; BOOT is GPIO35.
|
|
25
|
+
|
|
26
|
+
## Display failures and resolution
|
|
27
|
+
|
|
28
|
+
The ST7701 is a RAM-less video panel. Panel `swap_xy` is unavailable, so the
|
|
29
|
+
working product path exposes physical 480x800 to LVGL 8.3, sets `sw_rotate=1`,
|
|
30
|
+
and selects `LV_DISP_ROT_90` for the tested enclosure. GT911 reports native
|
|
31
|
+
coordinates and LVGL applies the same rotation to touch.
|
|
32
|
+
|
|
33
|
+
Observed traps:
|
|
34
|
+
|
|
35
|
+
| Symptom | Cause | Correction |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| Horizontal tear lines | Dirty rectangles copied into the framebuffer being scanned | Compose only in a safe back buffer and request presentation at the DSI frame boundary |
|
|
38
|
+
| Flicker or local UI corruption after double buffering | Alternating buffers contained different generations because only current dirty regions were updated | After flip completion, copy the presented frame's damage into the recycled back buffer before the next LVGL refresh |
|
|
39
|
+
| Startup tear | Code assumed fb0 was the back buffer while DPI initially scanned fb0 | Initialize equal buffers with the backlight off and compose the first frame in fb1 |
|
|
40
|
+
| Portrait/garbled output | LVGL 8.3 90/270 rotation configured without `sw_rotate=1` | Enable software rotation before setting the display rotation |
|
|
41
|
+
| Dark blue rendered yellow/brown | `LV_COLOR_16_SWAP=y` data reached a natural-endian RGB565 DSI input | Byte-swap each RGB565 word once while composing the panel framebuffer |
|
|
42
|
+
| UI did not fill 800x480 | Shared product helpers scaled a 320x240 design grid using fixed predecessor dimensions | Use runtime logical display width/height in position, zoom, video viewport and pool sizing |
|
|
43
|
+
| Touch opposite to UI | Display rotation changed independently of touch mapping | Keep GT911 native coordinates and let LVGL rotate both display and pointer |
|
|
44
|
+
|
|
45
|
+
`lvgl_port` avoid-tearing did not solve this composition because software
|
|
46
|
+
rotation flushed through temporary non-framebuffer-resident chunks. A PPA
|
|
47
|
+
transpose experiment introduced separate direction/color uncertainty. These
|
|
48
|
+
failed experiments are diagnostic history, not preferred implementations.
|
|
49
|
+
|
|
50
|
+
## Evidence boundary
|
|
51
|
+
|
|
52
|
+
User HIL on 2026-09-23 reported UI and video normal with `43c-port.10` after the
|
|
53
|
+
ROT_90 and damage carry-forward correction. This establishes the board display
|
|
54
|
+
path for that artifact, not AEC double-talk, weak-network recovery, PMIC power
|
|
55
|
+
semantics or 24-hour stability.
|
|
56
|
+
|
|
57
|
+
- Application BIN SHA256:
|
|
58
|
+
`2fb05d6985401b061ef3778f69b2f2b68a3d43cb6e7af145484d136de1ae2562`
|
|
59
|
+
- ELF SHA256:
|
|
60
|
+
`38b1ce6f0a5455fbd658b1c5e5275b89a07f2d5a7561652cfac04a5b3e6368de`
|
|
61
|
+
- Local source evidence at capture time:
|
|
62
|
+
`waveshare-esp32p4-4.3c-xiaotai/`, its Hardware IR, display driver, audio
|
|
63
|
+
contract and `docs/ESP32-P4-WIFI6-Touch-LCD-4.3-C-移植诊断手册.md`.
|
|
64
|
+
|
|
65
|
+
Apply the general display invariants from
|
|
66
|
+
[display-pipeline.md](../../references/display-pipeline.md) to other panels.
|
|
67
|
+
Treat the GPIO, rotation, codec address, TDM slots and AEC wiring above as exact
|
|
68
|
+
board facts only.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Device display pipeline
|
|
2
|
+
|
|
3
|
+
Use this reference for tearing, intermittent flicker, stale UI regions, wrong
|
|
4
|
+
RGB colors, panel orientation, touch-coordinate mismatch, or UI layouts that do
|
|
5
|
+
not fill a new display. Keep panel scan geometry, LVGL logical geometry, pixel
|
|
6
|
+
storage order, framebuffer ownership and touch mapping as separate facts.
|
|
7
|
+
|
|
8
|
+
## RAM-less video panels
|
|
9
|
+
|
|
10
|
+
ST7701 and similar MIPI-DSI video panels continuously scan a framebuffer and
|
|
11
|
+
have no panel RAM that makes a partial write atomic. Identify the buffer being
|
|
12
|
+
scanned before writing. A successful `draw_bitmap` call or two allocated frame
|
|
13
|
+
buffers does not by itself prevent tearing.
|
|
14
|
+
|
|
15
|
+
For a partial-rendering double-buffer path, prove all of these invariants:
|
|
16
|
+
|
|
17
|
+
- LVGL writes only the back buffer; initialization must not assume framebuffer
|
|
18
|
+
zero is free when the controller starts by scanning framebuffer zero.
|
|
19
|
+
- Presentation changes the scan buffer at a frame boundary and the old front
|
|
20
|
+
buffer is recycled only after the corresponding VSYNC/refresh completion.
|
|
21
|
+
- Before the recycled buffer receives the next dirty regions, carry forward
|
|
22
|
+
every region changed in the presented frame. Alternating two buffers while
|
|
23
|
+
updating only the latest dirty rectangles produces different UI generations,
|
|
24
|
+
seen as intermittent flicker, stale widgets or local corruption.
|
|
25
|
+
- A semaphore token must correspond to a refresh after the requested flip.
|
|
26
|
+
Drain earlier periodic VSYNC tokens around the request or use a monotonic
|
|
27
|
+
generation/counter; an already-full binary semaphore is not flip evidence.
|
|
28
|
+
|
|
29
|
+
Valid implementations include damage carry-forward after VSYNC, a canonical
|
|
30
|
+
shadow frame copied into a safe back buffer, or a genuinely full-frame path.
|
|
31
|
+
Choose using measured memory bandwidth and audio/video deadlines. LVGL 8.3
|
|
32
|
+
software rotation cannot be combined with its `direct_mode` or `full_refresh`
|
|
33
|
+
shortcut; inspect the selected LVGL version before choosing a strategy.
|
|
34
|
+
|
|
35
|
+
## Rotation, color and touch
|
|
36
|
+
|
|
37
|
+
- A RAM-less panel's fixed native raster can prevent panel-level `swap_xy`.
|
|
38
|
+
With LVGL 8.3 partial buffers, set `sw_rotate=1` before selecting 90/270
|
|
39
|
+
software rotation. `lv_disp_drv_update()` alone does not enable it.
|
|
40
|
+
- Treat 90 versus 270 as a physical installation fact. Verify with asymmetric
|
|
41
|
+
corner labels on the exact enclosure; a vendor portrait drawing does not
|
|
42
|
+
decide the product's landscape direction.
|
|
43
|
+
- Let one layer own display and touch rotation. When LVGL rotates the display,
|
|
44
|
+
feed the touch driver native panel coordinates and verify all four corners.
|
|
45
|
+
A second manual transform commonly creates a 180-degree mismatch.
|
|
46
|
+
- Derive RGB565 byte order across assets, `LV_COLOR_16_SWAP`, the rotation
|
|
47
|
+
buffer and the panel input. A dark-blue word rendered yellow/brown is a useful
|
|
48
|
+
byte-swap signature. Apply one evidenced swap at the framebuffer boundary.
|
|
49
|
+
|
|
50
|
+
## Layout and video checks
|
|
51
|
+
|
|
52
|
+
Find design-grid scaling that still uses a predecessor board's fixed width or
|
|
53
|
+
height. Scale against the runtime logical display size, including image zoom,
|
|
54
|
+
canvas placement, call-video viewport, decoder pools and presentation depth.
|
|
55
|
+
Keep camera/encoded-pixel orientation separate from device-display rotation;
|
|
56
|
+
read [video-orientation.md](video-orientation.md) for the remote video path.
|
|
57
|
+
|
|
58
|
+
Hardware acceptance requires static and animated UI, rapid page changes,
|
|
59
|
+
subtitles or timers, four-corner touch, solid RGB test colors and sustained
|
|
60
|
+
video. Bind the observation to the exact application BIN hash. Compiler success
|
|
61
|
+
does not verify VSYNC ownership, physical rotation or color order.
|