Files
fds-os/docs/dasung.md
T
2026-09-24 13:03:52 +08:00

196 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Dasung Paperlike display
FDS includes `dasungd` for the configured Dasung Paperlike 13K grayscale monitor.
The controller starts during early boot and remains supervised in the base system,
including console-only use. No GUI or ENVIRONMENT cartridge is required.
For installation, disk preparation and first power-on, start with
[Run FDS on a Raspberry Pi 5](hardware-setup.md).
The supplied profile uses the dedicated monitor's EDID and USB companion identity,
with raw mode 1 and contrast 4 as startup defaults. It is specific to that monitor;
do not use its identity as a blanket match for other CH340 USB devices.
## HDMI plus USB-C on the Pi
Use the Pi's **micro-HDMI output** for video to the monitor's HDMI input. Use a
separate **USB-A-to-USB-C data cable** from a Pi host port to the monitor for
controller access, and power the monitor with its supplied DC adapter. The
Pi's own USB-C connector is its power input; it does not output USB-C video.
See the [wiring table](hardware-setup.md#2-wire-hdmi-video-usb-control-and-power-separately),
[official Pi display guidance](https://www.raspberrypi.com/documentation/computers/getting-started.html#display),
and [DASUNG's power guidance](https://shop.dasung.com/pages/q-a).
HDMI video and USB controller access are separate checks. The daemon talks USB
regardless of the video cable, but the HDMI-plus-USB arrangement still needs to
expose the expected UART and companion bridge on this monitor. HDMI alone does
not carry the daemon's control protocol. A charge-only cable or a USB-C lead
connected only to a charger cannot provide host USB control.
The image currently supplies a firmware EDID override for 3200 × 2400 at about
37 Hz, recorded on the original workstation. DASUNG says some HDMI hosts need
27 Hz instead; that does not establish which mode the Pi and this cable will
accept. The forced profile can prevent using the monitor's native HDMI mode
list. Use the diagnostic procedure below if needed; neither Pi HDMI compatibility
nor physical power-cycle recovery is recorded as passed yet.
[Manufacturer HDMI note](https://shop.dasung.com/pages/dasung-paperlike-13k-the-worlds-first-13-3-inch-37hz-3k-e-ink-monitor).
## Inspect the controller
The controller's socket is restricted to root. Use the local `RECOVERY#` console
described in [Enter recovery](recovery.md#enter-recovery); the ordinary `FDS>`
account cannot access it. On FDS recovery:
```sh
dasungd status
dasungd query
```
`status` reports whether the monitor is connected and responsive, the age of its
last reply and cached parameters. `query` requests current values. To refresh
the display or adjust contrast:
```sh
dasungd refresh
dasungd set contrast 4
dasungd set mode 1 --save
dasungd forget mode
```
A successful set means the command was sent; use query/status to read back the
result. The grayscale model uses raw numeric modes. Saved overrides in
`/run/dasungd/settings.json` survive a daemon restart during the same boot, but
not power loss. Image configuration defaults are in `/etc/dasungd.toml`.
## Diagnose a connection problem
Inspect `/run/log/dasungd/current` and the reported status. Discovery requires
the configured DRM EDID and matching USB companion topology. An ambiguous match
is rejected. Set `usb_path` only after identifying the intended device topology.
At `RECOVERY#`, start with:
```sh
lsusb
lsusb -t
dasungd status
dasungd query
tail -80 /run/log/dasungd/current
```
The existing profile expects UART `1a86:7523` alongside SPI bridge `1a86:5512`
under the same hub. If neither appears, check monitor power, its USB data port,
the cable and the Pi host connection. If only one appears, preserve the USB tree
and log: the cable/input combination has not yet satisfied the current profile.
Do not disable companion checks or match every CH340 device to hide the failure.
`status` separates `connected` from `responsive` and includes `usb_error`,
`display_error`, `displays`, `rx_frames` and `last_rx_ms_ago`. `query` queues
requests; run `status` again after replies arrive. Keepalive packets being sent
are not themselves evidence that the monitor answered.
Capture the actual DRM connector names and EDID at `RECOVERY#`:
```sh
mkdir /tmp/dasung-hdmi
cat /proc/cmdline > /tmp/dasung-hdmi/cmdline.txt
for fds_connector in /sys/class/drm/card*-*; do
[ -f "$fds_connector/status" ] || continue
fds_connector_name=${fds_connector##*/}
printf '%s: ' "$fds_connector_name"
cat "$fds_connector/status"
cat "$fds_connector/modes"
cp "$fds_connector/status" "/tmp/dasung-hdmi/$fds_connector_name.status"
cp "$fds_connector/modes" "/tmp/dasung-hdmi/$fds_connector_name.modes"
cp "$fds_connector/edid" "/tmp/dasung-hdmi/$fds_connector_name.edid"
done
```
Use a new directory for each capture and save it before shutdown using
[machine diagnostics](internal-storage.md#save-and-retrieve-diagnostics).
An empty EDID on a disconnected connector is expected. The `modes` file lists
available resolution names, not proof of the active refresh rate or picture
quality. With `drm.edid_firmware` active, the EDID you read may be the supplied
override; capture again without it to learn what HDMI actually advertises.
The configured DRM serial is `L56051794302`. Native HDMI EDID might identify the
display differently from the recorded USB-C profile. With `require_display=true`,
an identity mismatch can leave USB control disconnected even when HDMI video
works. Retain the native EDID, USB topology and errors for a deliberate profile
update; do not silently remove identity checks. Config changes must ultimately
be rebuilt into both early boot and base/recovery images. The read-only
`/etc/dasungd.toml` is not a persistent settings editor.
## Try the monitor's own HDMI EDID
Use this when the stock forced timing gives a blank or unstable picture, or when
temporarily connecting a different HDMI display. The override currently applies
to connected DRM outputs without a connector qualifier, so attaching another
screen while retaining it is not an independent native-mode test.
Follow the offline edit procedure below. In the disk's **single-line**
`cmdline.txt`, remove only this token for the EDID experiment:
```text
drm.edid_firmware=edid/dasung-paperlike13k-37hz.bin
```
For verbose diagnosis with a USB keyboard and display console, a complete
command line based on the current production template is:
```text
console=tty1 rdinit=/init ro loglevel=7 vt.global_cursor_default=0 fds.boot=normal fds.debug=1
```
For the serial boot mode, retain `console=ttyAMA10,115200` after `console=tty1`
instead. Use `fds.boot=recovery` in place of `fds.boot=normal` when intentionally
booting recovery; never append a second conflicting `fds.boot` option. Do not add
`fds.emulator=1` on real hardware or replace stage0 with a Raspberry Pi OS
`root=…` command line.
Reboot and repeat the DRM/USB capture. Removing the override allows the monitor's
HDMI EDID to supply modes; it does **not** guarantee 27 Hz or fix missing USB
control. Record any change in picture and controller status. Restore the saved
command line to return to the shipped profile. Keep both captures so a future
HDMI profile change can be based on observed timings and identity.
### Edit the BOOT command line offline
Shut FDS down and disconnect Pi power. Connect NVMe to the Linux workstation, or
boot the separate maintenance SD and access the inactive NVMe there. Identify
the same disk by model/serial used when flashing it. Mount only its first
partition, labeled `FDS_BOOT`; FDS does not normally mount it at
`/boot/firmware` as Raspberry Pi OS does.
On that **workstation or maintenance OS**, replacing the partition path below:
```sh
lsblk -p -o NAME,MODEL,SERIAL,SIZE,TYPE,PARTLABEL,MOUNTPOINTS
sudo mkdir -p /mnt/fds-boot
sudo mount -o nosuid,nodev,noexec \
/dev/disk/by-id/REPLACE_WITH_VERIFIED_NVME-part1 /mnt/fds-boot
sudo cp -n /mnt/fds-boot/cmdline.txt /mnt/fds-boot/cmdline.before-hardware.txt
sudoedit /mnt/fds-boot/cmdline.txt
cat /mnt/fds-boot/cmdline.txt
sudo umount /mnt/fds-boot
```
Check the identity before the mount and stop on any failed step. If the partition
was automounted, unmount that instance first. Keep `/mnt/fds-boot` dedicated to
this operation. The no-clobber copy retains an existing backup; if repeating the
experiment, inspect that backup and skip the copy step if it already exists.
Do not assume an older backup contains your latest settings. Keep `cmdline.txt`
on one line and record its final contents with the
test session. Safely disconnect the enclosure before moving NVMe back to the Pi.
To undo the edit, mount the same verified partition again, restore
`cmdline.before-hardware.txt` over `cmdline.txt`, and unmount before rebooting.
These edits change the flashed copy only; they do not change the source images
or their recorded hashes. Reflashing restores the image's original command line.
FDS uses the daemon for USB control. Its configuration disables the original
workstation-specific display hotplug procedure. Video mode and cabling are part
of the machine's boot/display configuration. The detailed protocol, build
rationale and physical display procedures are in the
[developer reference](developer/dasung.md).