<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 30, 2020 at 7:14 AM Christian Mauderer <<a href="mailto:christian.mauderer@embedded-brains.de">christian.mauderer@embedded-brains.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">---<br>
 shell/general_commands.rst | 200 +++++++++++++++++++++++++++++++++++++<br>
 1 file changed, 200 insertions(+)<br>
<br>
diff --git a/shell/general_commands.rst b/shell/general_commands.rst<br>
index c74ae45..a6f7e18 100644<br>
--- a/shell/general_commands.rst<br>
+++ b/shell/general_commands.rst<br>
@@ -44,6 +44,14 @@ The RTEMS shell has the following general commands:<br>
<br>
 - rtc_ - RTC driver configuration<br>
<br>
+- i2cdetect_ - detect I2C devices<br>
+<br>
+- i2cget_ - get data from an EEPROM like I2C device<br>
+<br>
+- i2cset_ - write data to an EEPROM like I2C device<br>
+<br>
+- spi_ - read and write simple data to an SPI bus<br>
+<br>
 - exit_ - alias for logoff command<br>
<br>
 Commands<br>
@@ -1179,6 +1187,198 @@ CONFIGURATION:<br>
<br>
    \clearpage<br>
<br>
+.. _i2cdetect:<br>
+<br>
+i2cdetect - detect I2C devices<br>
+------------------------------<br>
+.. index:: i2cdetect<br>
+<br>
+SYNOPSYS:<br>
+    .. code-block:: shell<br>
+<br>
+        i2cdetect <I2C_BUS><br>
+<br>
+.. index:: CONFIGURE_SHELL_NO_COMMAND_I2CDETECT<br>
+.. index:: CONFIGURE_SHELL_COMMAND_I2CDETECT<br>
+<br>
+DESCRIPTION:<br>
+    Tries to detect I2C devices connected to the I2C bus. To do that, write<br>
+    requests with the length of 0 are used.<br>
+<br>
+    WARNING: This might confuse some I2C devices, so please use it only if you<br>
+    know what you are doing.<br>
+<br></blockquote><div>What happens for devices that don't know how to respond? is it any kind of undefined behavior?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+    The command supports a ``-h`` option to get usage details.<br>
+<br>
+    The command works only with I2C bus drivers that use the Linux-Style API.<br>
+<br>
+EXAMPLES:<br>
+    The following is an example where two I2C devices are detected. One on 0x1a<br>
+    and one on 0x1f:<br>
+<br>
+    .. code-block:: shell<br>
+<br>
+        SHLL [/] # i2cdetect /dev/i2c1<br>
+            x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF<br>
+        0x     -- -- -- -- -- -- -- -- -- -- -- -- -- -- --<br>
+        1x  -- -- -- -- -- -- -- -- -- -- 1a -- -- -- -- 1f<br>
+        2x  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --<br>
+        3x  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --<br>
+        4x  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --<br>
+        5x  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --<br>
+        6x  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --<br>
+        7x  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --<br>
+        SHLL [/] #<br>
+<br>
+CONFIGURATION:<br>
+    This command is included in the default shell command set.  When building a<br></blockquote><div> </div><div>If this is unsafe to use when you don't know what you're doing, then maybe it should not be available without explicitly turning it on?  (Safe Defaults)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+    custom command set, define ``CONFIGURE_SHELL_COMMAND_I2CDETECT`` to have<br>
+    this command included.<br>
+<br>
+    This command can be excluded from the shell command set by defining<br>
+    ``CONFIGURE_SHELL_NO_COMMAND_I2CDETECT`` when all shell commands have been<br>
+    configured.<br>
+<br>
+.. raw:: latex<br>
+<br>
+   \clearpage<br>
+<br>
+.. _i2cget:<br>
+<br>
+i2cget - get data from an EEPROM like I2C device<br>
+------------------------------------------------<br>
+.. index:: i2cget<br>
+<br>
+SYNOPSYS:<br>
+    .. code-block:: shell<br>
+<br>
+        i2cget <I2C_BUS> <CHIP-ADDRESS> <DATA-ADDRESS> [<NR-BYTES>]<br>
+<br>
+.. index:: CONFIGURE_SHELL_NO_COMMAND_I2CGET<br>
+.. index:: CONFIGURE_SHELL_COMMAND_I2CGET<br>
+<br>
+DESCRIPTION:<br>
+    Get one or multiple bytes from an EEPROM like I2C device. If you read<br>
+    multiple bytes (<NR-BYTES> given and > 1) the read will be done in one<br></blockquote><div><br></div><div>Default is 1 byte? Please clarify</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+    single request. An auto incrementing register pointer is assumed.<br>
+<br>
+    The command supports a ``-h`` option to get usage details.<br>
+<br>
+    The command works only with I2C bus drivers that use the Linux-Style API.<br></blockquote><div><br></div><div>Would it make more sense to include all these under an CONFIGURE_SHELL_COMMAND_I2CLINUX or something?</div><div><br></div><div>I don't use the shell though so take everything I say with a bit of skepticism.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+<br>
+EXAMPLES:<br>
+    The following is an example how to read a one byte register at 0xd from the<br>
+    I2C device at 0x1f:<br>
+<br>
+    .. code-block:: shell<br>
+<br>
+        SHLL [/] # i2cget /dev/i2c1 0x1f 0x0d<br></blockquote><div><br></div><div>Again, my shell ignorance: do the addresses need to be specified as Hex in 0x format?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+        0xc7 <br>
+        SHLL [/] #<br>
+<br>
+CONFIGURATION:<br>
+    This command is included in the default shell command set.  When building a<br>
+    custom command set, define ``CONFIGURE_SHELL_COMMAND_I2CGET`` to have this<br>
+    command included.<br>
+<br>
+    This command can be excluded from the shell command set by defining<br>
+    ``CONFIGURE_SHELL_NO_COMMAND_I2CGET`` when all shell commands have been<br>
+    configured.<br>
+<br>
+.. raw:: latex<br>
+<br>
+   \clearpage<br>
+<br>
+.. _i2cset:<br>
+<br>
+i2cset - write data to an EEPROM like I2C device<br>
+------------------------------------------------<br>
+.. index:: i2cset<br>
+<br>
+SYNOPSYS:<br>
+    .. code-block:: shell<br>
+<br>
+        i2cset <I2C_BUS> <CHIP-ADDRESS> <DATA-ADDRESS> <VALUE> [<VALUE> [...]]<br>
+<br>
+.. index:: CONFIGURE_SHELL_NO_COMMAND_I2CSET<br>
+.. index:: CONFIGURE_SHELL_COMMAND_I2CSET<br>
+<br>
+DESCRIPTION:<br>
+    Write one or multiple bytes to an EEPROM like I2C device. If you write<br>
+    multiple bytes (multiple <VALUE> given) the write will be done in one single<br></blockquote><div><br></div><div>Same for the values, do they need to be in 0x format, or is there already documentation of what formats are accepted?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+    request. An auto incrementing register pointer is assumed.<br>
+<br>
+    The command supports a ``-h`` option to get usage details.<br>
+<br>
+    The command works only with I2C bus drivers that use the Linux-Style API.<br>
+<br>
+EXAMPLES:<br>
+    The following is an example how to write one byte of 0x00 to the register at<br>
+    0x11 of the I2C device at 0x1f:<br>
+<br>
+    .. code-block:: shell<br>
+<br>
+        SHLL [/] # i2cset /dev/i2c1 0x1f 0x11 0x00<br>
+        SHLL [/] #<br>
+<br>
+CONFIGURATION:<br>
+    This command is included in the default shell command set.  When building a<br>
+    custom command set, define ``CONFIGURE_SHELL_COMMAND_I2CSET`` to have this<br>
+    command included.<br>
+<br>
+    This command can be excluded from the shell command set by defining<br>
+    ``CONFIGURE_SHELL_NO_COMMAND_I2CSET`` when all shell commands have been<br>
+    configured.<br>
+<br>
+.. raw:: latex<br>
+<br>
+   \clearpage<br>
+<br>
+.. _spi:<br>
+<br>
+spi - read and write simple data to an SPI bus<br>
+----------------------------------------------<br>
+.. index:: spi<br>
+<br>
+SYNOPSYS:<br>
+    .. code-block:: shell<br>
+<br>
+        spi [-loh] [-c <cs>] [-s <speed>] [-m <mode>] <SPI_BUS> xx [xx [..]]<br>
+<br>
+.. index:: CONFIGURE_SHELL_NO_COMMAND_SPI<br>
+.. index:: CONFIGURE_SHELL_COMMAND_SPI<br>
+<br>
+DESCRIPTION:<br>
+    Write data to an SPI bus and read the responses.<br>
+<br>
+    The command supports a ``-h`` option to get usage details.<br>
+<br>
+    The command works only with SPI bus drivers that use the Linux-Style API.<br>
+<br>
+EXAMPLES:<br>
+    The following is an example how to write multiple bytes (0x42 0x43 0x44) to<br>
+    the bus. The response is three times 0x00 in this case because the bus has<br>
+    been left open. Chip select 1 will be used.<br>
+<br>
+    .. code-block:: shell<br>
+<br>
+        SHLL [/] # spi /dev/spi1 -c 1 42 0x43 44<br>
+        received: 00 00 00<br>
+        SHLL [/] #<br>
+<br></blockquote><div><br></div><div>Provide an example to read?</div><div> </div><div>Why not unify the i2c command the same way as spi? Just curious if there is some rationale.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+CONFIGURATION:<br>
+    This command is included in the default shell command set.  When building a<br>
+    custom command set, define ``CONFIGURE_SHELL_COMMAND_SPI`` to have this<br>
+    command included.<br>
+<br>
+    This command can be excluded from the shell command set by defining<br>
+    ``CONFIGURE_SHELL_NO_COMMAND_SPI`` when all shell commands have been<br>
+    configured.<br>
+<br>
+.. raw:: latex<br>
+<br>
+   \clearpage<br>
+<br>
 .. _exit:<br>
<br>
 exit - exit the shell<br>
-- <br>
2.26.2<br>
<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div></div>