Skip to content

ハードウェアリセット直後に OSError: [Errno 121] Remote I/O error #38

@miminashi

Description

@miminashi

ハードウェアリセット直後にget_is_online()を呼ぶと、I2Cの準備が完了していないのか、Remote I/O errorになります。
sakura.ioモジュールのI2Cがreadyかどうかの判断はどのようにすべきでしょうか?

$ echo 22 > /sys/class/gpio/export; \
echo out > /sys/class/gpio/gpio22/direction; \
echo 1 > /sys/class/gpio/gpio22/value; sleep 0.1; \
echo 0 > /sys/class/gpio/gpio22/value; \
python3 -c "from sakuraio.hardware.rpi import SakuraIOSMBus;print(SakuraIOSMBus().get_is_online())"
-bash: echo: write error: Device or resource busy
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/sakuraio/hardware/commands/common.py", line 34, in get_is_online
    status = self.get_connection_status()
  File "/usr/local/lib/python3.5/dist-packages/sakuraio/hardware/commands/common.py", line 24, in get_connection_status
    response = self.execute_command(CMD_GET_CONNECTION_STATUS)
  File "/usr/local/lib/python3.5/dist-packages/sakuraio/hardware/base.py", line 44, in execute_command
    self.start(False)
  File "/usr/local/lib/python3.5/dist-packages/sakuraio/hardware/rpi/__init__.py", line 16, in start
    self.bus.write_i2c_block_data(SAKURAIO_SLAVE_ADDR, self.request[0], self.request[1:])
OSError: [Errno 121] Remote I/O error

とりあえず、ハードウェアリセットからI2Cアクセスまで2秒くらい待機することで回避しています。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions