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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions