<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/simtrace2/+/24521">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">octsimtest: Switch direction of I/O level shifter depending on uart tx / rx<br><br>Contrary to other hardware designs, octsimtest has a level-shifter in<br>the I/O line to support testing with 1.8, 3 and 5V.  This level shifter<br>is bi-directional, but the direction needs to be explicitly specified<br>via the SIM_IO_DIR signal attached to PA26.<br><br>Change-Id: I44171363b5bd69d6049b12c86f8143be83557cb2<br>---<br>M firmware/libboard/octsimtest/include/board.h<br>M firmware/libcommon/source/mode_cardemu.c<br>2 files changed, 23 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/21/24521/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/firmware/libboard/octsimtest/include/board.h b/firmware/libboard/octsimtest/include/board.h</span><br><span>index 6006796..361c180 100644</span><br><span>--- a/firmware/libboard/octsimtest/include/board.h</span><br><span>+++ b/firmware/libboard/octsimtest/include/board.h</span><br><span>@@ -62,8 +62,10 @@</span><br><span> #define PIN_PHONE_IO           {PIO_PA22A_TXD1, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}</span><br><span> /* Phone CLK clock input (CLK_PHONE in schematic) */</span><br><span> #define PIN_PHONE_CLK          {PIO_PA23A_SCK1, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}</span><br><span style="color: hsl(120, 100%, 40%);">+/* Pin used to switch level shifter in I/O line between rx (0) and tx (1) */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PIN_USIM1_IO_DIR   {PIO_PA16, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_OUTPUT_0}</span><br><span> /* Pin used for phone USIM slot 1 communication */</span><br><span style="color: hsl(0, 100%, 40%);">-#define PINS_USIM1              PIN_PHONE_IO, PIN_PHONE_CLK, PIN_PHONE_CLK_INPUT, PIN_USIM1_VCC, PIN_PHONE_IO_INPUT, PIN_USIM1_nRST</span><br><span style="color: hsl(120, 100%, 40%);">+#define PINS_USIM1              PIN_PHONE_IO, PIN_PHONE_CLK, PIN_PHONE_CLK_INPUT, PIN_USIM1_VCC, PIN_PHONE_IO_INPUT, PIN_USIM1_nRST, PIN_USIM1_IO_DIR</span><br><span> /* Phone I/O data signal input/output (unused USART RX input; connected to I/O_PHONE in schematic) */</span><br><span> #define PIN_PHONE_IO_INPUT     {PIO_PA21A_RXD1, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}</span><br><span> /* Pin used as clock input (to measure the ETU duration; connected to CLK_PHONE in schematic) */</span><br><span>diff --git a/firmware/libcommon/source/mode_cardemu.c b/firmware/libcommon/source/mode_cardemu.c</span><br><span>index 127556c..604c66a 100644</span><br><span>--- a/firmware/libcommon/source/mode_cardemu.c</span><br><span>+++ b/firmware/libcommon/source/mode_cardemu.c</span><br><span>@@ -42,6 +42,10 @@</span><br><span> static const Pin pins_usim1[]      = {PINS_USIM1};</span><br><span> static const Pin pin_usim1_rst       = PIN_USIM1_nRST;</span><br><span> static const Pin pin_usim1_vcc     = PIN_USIM1_VCC;</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef PIN_USIM1_IO_DIR</span><br><span style="color: hsl(120, 100%, 40%);">+static const Pin pin_io_dir  = PIN_USIM1_IO_DIR;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> #ifdef CARDEMU_SECOND_UART</span><br><span> static const Pin pins_usim2[]        = {PINS_USIM2};</span><br><span>@@ -142,12 +146,27 @@</span><br><span>      wait_tx_idle(usart);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void card_emu_uart_set_direction(uint8_t uart_chan, bool tx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ /* only on some boards (octsimtest) we hae an external level</span><br><span style="color: hsl(120, 100%, 40%);">+   * shifter that requires us to switch the direction between RX and TX */</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef PIN_USIM1_IO_DIR</span><br><span style="color: hsl(120, 100%, 40%);">+     if (uart_chan == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         if (tx)</span><br><span style="color: hsl(120, 100%, 40%);">+                       PIO_Set(&pin_io_dir);</span><br><span style="color: hsl(120, 100%, 40%);">+             else</span><br><span style="color: hsl(120, 100%, 40%);">+                  PIO_Clear(&pin_io_dir);</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* call-back from card_emu.c to enable/disable transmit and/or receive */</span><br><span> void card_emu_uart_enable(uint8_t uart_chan, uint8_t rxtx)</span><br><span> {</span><br><span>       Usart *usart = get_usart_by_chan(uart_chan);</span><br><span>         switch (rxtx) {</span><br><span>      case ENABLE_TX:</span><br><span style="color: hsl(120, 100%, 40%);">+               card_emu_uart_set_direction(uart_chan, true);</span><br><span>                USART_DisableIt(usart, ~(US_IER_TXRDY | US_IER_TIMEOUT));</span><br><span>            /* as irritating as it is, we actually want to keep the</span><br><span>               * receiver enabled during transmit */</span><br><span>@@ -173,6 +192,7 @@</span><br><span>                  * transmitter enabled during receive */</span><br><span>             USART_SetTransmitterEnabled(usart, 1);</span><br><span>               wait_tx_idle(usart);</span><br><span style="color: hsl(120, 100%, 40%);">+          card_emu_uart_set_direction(uart_chan, false);;</span><br><span>              usart->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK;</span><br><span>                USART_EnableIt(usart, US_IER_RXRDY);</span><br><span>                 USART_SetReceiverEnabled(usart, 1);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/simtrace2/+/24521">change 24521</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/simtrace2/+/24521"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: simtrace2 </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I44171363b5bd69d6049b12c86f8143be83557cb2 </div>
<div style="display:none"> Gerrit-Change-Number: 24521 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>