Appendix · reference

Broadcom BCM4345C5 (Bluetooth)

AP6255 BT die — HCI over UART2 at 1.5 / 3.0 Mbaud

Identity

PartBroadcom BCM4345C5 (BT die in the AzureWave AP6255 module; Murata Type-1MW build with 37.4 MHz crystal)
RoleBluetooth 5.0 BR/EDR + LE controller
Bus / addressHCI over UART2 (/dev/cuau0) at 1500000 baud (boot) / negotiated up to 3000000; hardware flow control
GPIO / IRQBT_HOST_WAKE = GPIO0_PA4 (4), BT_DEV_WAKE = GPIO2_PD2 (26), BT_REG_ON = GPIO0_PB1
DatasheetBroadcom BCM4345 (NDA; reference is the Linux hci_bcm driver)
Pine64 wikiPinePhone Pro — Connectivity
Schematicsheet 4 (AP6255 module)

Status — ● working

Firmware loads, the chip enumerates, SSP with Just Works completes, AES-CCM is active (Encryption_Change enabled = 0x02), and A2DP plays end-to-end to a Bluetooth speaker. The crystal is 37.4 MHz on the Murata 1MW build — the SC-disabled Raspberry Pi BCM4345C0.hcd will load but rejects Write_Secure_Connections_Host_Support; the Murata patchram is what we ship.

Driver

ng_h4frame is a netgraph node with two hooks (lower for raw bytes from ng_tty, upper for HCI frames to ng_hci) and a 3-state machine (H4S_TYPE → H4S_HDR → H4S_PAYLOAD). A sysctl-controlled “tickler” pokes the chip with a 0x00 byte mid-event to flush partial events when HOST_WAKE isn’t doing its job. With HOST_WAKE wired as a real interrupt the tickler is empirically redundant but stays on by default.

Open work