Lcd_pcf8574 timing/packet size

I’m using the lcd_pcf8574 component, like this:

i2c:
  sda: GPIO16
  scl: GPIO17
  scan: false

display:
  - platform: lcd_pcf8574
    id: my_display
    dimensions: 20x4
    address: 0x27
    lambda: |-
      it.strftime("%H:%M:%S", id(sntp_time).now());

I’m getting warnings like these…

[04:52:20][W][component:239]: Component display took a long time for an operation (255 ms).
[04:52:20][W][component:240]: Components should block for at most 30 ms.
[04:52:21][W][component:239]: Component display took a long time for an operation (253 ms).
[04:52:21][W][component:240]: Components should block for at most 30 ms.

And indeed, when I look at the I²C transaction on a scope it takes about 250 ms. At a bus frequency of 50 kHz that’s about 1.5 kBytes of data? And the default update rate is 1 second (it’s not event driven).

That can’t be right? The display blocks the CPU for almost a quarter of a second, every second, just to show 8 characters?

What am I missing?

frequency: 400kHz

1 Like