Changelog

# Changelog

## 0.2.0 — 2026-10-28

### 新增:两个例程

- `examples/bringup_minimal` — 点亮一块新屏的最小骨架。不接 LVGL,
  只有 `screen` 一层:上电/复位/DSI/初始化表/video mode/纯色轮播。
  三个文件改完就是你的屏(`board_config.h` / `panel_timing.h` / `panel_init.c`)。
- `examples/incell_540x810_2lane` — 完整参考:显示 + 触摸 + LVGL music demo。
  演示分层写法(`screen` / `touch` / `lv_port` 互不知道对方,只有 `lv_port` 是胶水),
  以及一组实测可用的参数(porch / lane / DPI / LDO)。

两个例程都自包含,可以单独拷出去 `idf.py build`。

### 组件本体

无接口变更,功能与 0.1.0 相同。

## 0.1.0 — 2026-10-28

首个版本。全部能力都不修改 ESP-IDF,只在自己的编译单元里包含 `hal` 的私有 inline 接口。

### 命令发送
- `dsi_ext_init(port)` — 取 DSI host / bridge 句柄
- `dsi_ext_tx(vc, dt, data, len)` — 任意数据类型的命令发送(0x03/05/13/15/29/39),
  payload 按 4 字节对齐压 FIFO;命令/写 FIFO 等待带次数上限,超时返回 `ESP_ERR_TIMEOUT`
- `dsi_ext_cmd_channel_config(cmd_ack, te_ack, all_lp)` — 关掉 IDF 默认打开的 cmd_ack,
  并逐类设置写命令的 LP/HS 速度

### 读
- `dsi_ext_rx(vc, dt, req, req_len, buf, read_len, timeout_ms, actual_len)` — 任意 DT 读取,
  全程带超时,返回实际读到的字节数,退出时恢复原 video mode 状态
- `dsi_ext_rx_dcs(cmd, buf, read_len, timeout_ms, actual_len)` — DCS 读便捷封装
- `dsi_ext_set_read_speed(lp)` — 设置**读请求本身**的传输速度(`DCS_SR_0P_TX` 等),
  IDF 与多数示例都漏了这一位;面板只收 LP 命令时,这正是读不通的原因
- `dsi_ext_set_max_read_time(cycles)` — `MAX_RD_TIME`(TRM 43.79)
- `dsi_ext_enable_bta_timeout(bta, lp_rx)` — 打开 BTA / hs_rd / lp_rd 超时
- `dsi_ext_rx_faulted()` / `dsi_ext_rx_clear_fault()` — 读超时后的故障锁存
- `dsi_ext_link_reset()` — host/PHY `shutdownz` 掉电复位,用于读卡死后重建链路

### 图案与 framebuffer
- `dsi_ext_vpg(panel, pattern)` — OFF / 垂直彩条 / 水平彩条 / BER(host 内部生成)
- `dsi_ext_fb_get(panel, &fb)` / `dsi_ext_fb_sync(fb, size)` — 直写面板内部 framebuffer

### IDF 写死的硬件行为
- `dsi_ext_set_clock_lane(force_hs)` — 消隐期是否回 LP
- `dsi_ext_set_timing_polarity(hsync, vsync, de, shutdn, colorm)` — 5 个同步极性
- `dsi_ext_set_pixel_type(raw_type, dpi_config)` — bridge `pixel_type` 直写

### 平台
- 仅 `SOC_MIPI_DSI_SUPPORTED`;其它 target 编译为返回 `ESP_ERR_NOT_SUPPORTED` 的 stub
- 实测环境:ESP32-P4(2 lane @800Mbps,540×810 RGB888)