Skip to content

Fix OSError in ssd1327 driver #369

Description

@ezio-melotti

I've seen the display crashing with the following error:

Apr 12 07:42:08 twrpi1 python[8301]: Traceback (most recent call last):
Apr 12 07:42:08 twrpi1 python[8301]:   File "<frozen runpy>", line 198, in _run_module_as_main
Apr 12 07:42:08 twrpi1 python[8301]:   File "<frozen runpy>", line 88, in _run_code
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/src/simoc_sam/displays/ssd1327.py", line 87, in <module>
Apr 12 07:42:08 twrpi1 python[8301]:     asyncio.run(main())
Apr 12 07:42:08 twrpi1 python[8301]:     ~~~~~~~~~~~^^^^^^^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/usr/lib/python3.13/asyncio/runners.py", line 195, in run
Apr 12 07:42:08 twrpi1 python[8301]:     return runner.run(main)
Apr 12 07:42:08 twrpi1 python[8301]:            ~~~~~~~~~~^^^^^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/usr/lib/python3.13/asyncio/runners.py", line 118, in run
Apr 12 07:42:08 twrpi1 python[8301]:     return self._loop.run_until_complete(task)
Apr 12 07:42:08 twrpi1 python[8301]:            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/usr/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
Apr 12 07:42:08 twrpi1 python[8301]:     return future.result()
Apr 12 07:42:08 twrpi1 python[8301]:            ~~~~~~~~~~~~~^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/src/simoc_sam/displays/ssd1327.py", line 80, in main
Apr 12 07:42:08 twrpi1 python[8301]:     await asyncio.gather(
Apr 12 07:42:08 twrpi1 python[8301]:     ...<2 lines>...
Apr 12 07:42:08 twrpi1 python[8301]:     )
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/src/simoc_sam/displays/ssd1327.py", line 50, in update_display
Apr 12 07:42:08 twrpi1 python[8301]:     display.refresh()
Apr 12 07:42:08 twrpi1 python[8301]:     ~~~~~~~~~~~~~~~^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/venv/lib/python3.13/site-packages/busdisplay/__init__.py", line 299, in refresh
Apr 12 07:42:08 twrpi1 python[8301]:     self._refresh_display()
Apr 12 07:42:08 twrpi1 python[8301]:     ~~~~~~~~~~~~~~~~~~~~~^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/venv/lib/python3.13/site-packages/busdisplay/__init__.py", line 308, in _refresh_display
Apr 12 07:42:08 twrpi1 python[8301]:     self._refresh_area(area)
Apr 12 07:42:08 twrpi1 python[8301]:     ~~~~~~~~~~~~~~~~~~^^^^^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/venv/lib/python3.13/site-packages/busdisplay/__init__.py", line 389, in _refresh_area
Apr 12 07:42:08 twrpi1 python[8301]:     self._core.set_region_to_update(subrectangle)
Apr 12 07:42:08 twrpi1 python[8301]:     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/venv/lib/python3.13/site-packages/displayio/_displaycore.py", line 320, in set_region_to_update
Apr 12 07:42:08 twrpi1 python[8301]:     self.send(data_type, chip_select, data)
Apr 12 07:42:08 twrpi1 python[8301]:     ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/venv/lib/python3.13/site-packages/displayio/_displaycore.py", line 373, in send
Apr 12 07:42:08 twrpi1 python[8301]:     self._send(data_type, chip_select, data)
Apr 12 07:42:08 twrpi1 python[8301]:     ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/venv/lib/python3.13/site-packages/i2cdisplaybus/__init__.py", line 126, in _send
Apr 12 07:42:08 twrpi1 python[8301]:     raise error
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/venv/lib/python3.13/site-packages/i2cdisplaybus/__init__.py", line 120, in _send
Apr 12 07:42:08 twrpi1 python[8301]:     self._i2c.writeto(self._dev_addr, buffer=command_bytes)
Apr 12 07:42:08 twrpi1 python[8301]:     ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/venv/lib/python3.13/site-packages/busio.py", line 223, in writeto
Apr 12 07:42:08 twrpi1 python[8301]:     return self._i2c.writeto(address, buffer, stop=True)
Apr 12 07:42:08 twrpi1 python[8301]:            ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/venv/lib/python3.13/site-packages/adafruit_blinka/microcontroller/generic_linux/i2c.py", line 68, in writeto
Apr 12 07:42:08 twrpi1 python[8301]:     self._i2c_bus.write_bytes(address, buffer[start:end])
Apr 12 07:42:08 twrpi1 python[8301]:     ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 12 07:42:08 twrpi1 python[8301]:   File "/home/pi/simoc-sam/venv/lib/python3.13/site-packages/Adafruit_PureIO/smbus.py", line 303, in write_bytes
Apr 12 07:42:08 twrpi1 python[8301]:     self._device.write(buf)
Apr 12 07:42:08 twrpi1 python[8301]:     ~~~~~~~~~~~~~~~~~~^^^^^
Apr 12 07:42:08 twrpi1 python[8301]: OSError: [Errno 5] Input/output error

A simple try/except around the display.refresh() should fix the issue.

Metadata

Metadata

Assignees

Labels

sensorsIssues related to sensors and other I2C devices

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions