<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Control E-Paper display with SPI.</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/107278/control-e-paper-display-with-spi</link><description>Hey, 
 
 I try to communicate with an E-Paper display (GDEY0579Z93) from my NRF52 52832 DK. I used this thread ( ) and this example ( https://github.com/too1/ncs-spi-master-slave-example ) as template. 
 The manufacturer provides an Arduino example, which</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 15 Jan 2024 17:33:24 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/107278/control-e-paper-display-with-spi" /><item><title>RE: Control E-Paper display with SPI.</title><link>https://devzone.nordicsemi.com/thread/464262?ContentTypeID=1</link><pubDate>Mon, 15 Jan 2024 17:33:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0845bdb7-2267-480c-b30c-5f0a41c7d89f</guid><dc:creator>hmolesworth</dc:creator><description>&lt;p&gt;P0.00 and P0.01 may be configured as external crystal pins; worth checking all the pins after they have been initialsed in case something overrides the expected result. After the inits call showPins():&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;// Some port pins (P1) are only available on nRF52840
#if defined(NRF52840_XXAA) || defined(NRF52840_XXAB)
#define NUMBER_PORT_PINS 48
#else
#define NUMBER_PORT_PINS 32
#endif

const char * FindPinMap(const uint32_t PinId);

void showPins(void)
{
   uint8_t InfoPacket[80] = &amp;quot;&amp;quot;;
   for (uint32_t PinId=0; PinId&amp;lt;NUMBER_PORT_PINS; PinId++)
   {
        // Show any mapped peripheral for this port pin
        snprintf(InfoPacket, sizeof(InfoPacket)-1, &amp;quot;P%u.%02u Map: %s&amp;quot;, (PinId &amp;amp; 0x20)&amp;gt;&amp;gt;5, PinId&amp;amp;0x1F, FindPinMap(PinId));
        NRF_LOG_INFO(&amp;quot;%s&amp;quot;, InfoPacket);
        NRF_LOG_FLUSH();
        //uartSend(InfoPacket, strlen(InfoPacket));
   }
}

const char * FindPinMap(const uint32_t PinId)
{
    // 32kHz Osc pins can be used as GPIOs or 32kHz Oscillator, special case
    if ( (PinId == PIN_XL2) &amp;amp;&amp;amp; (NRF_CLOCK-&amp;gt;LFCLKSRC &amp;amp; 0x000001) ) return &amp;quot;RTC-OSC-OUT&amp;quot;;
    if ( (PinId == PIN_XL1) &amp;amp;&amp;amp; (NRF_CLOCK-&amp;gt;LFCLKSRC &amp;amp; 0x000001) ) return &amp;quot;RTC-OSC-IN&amp;quot;;

    // NFC pins can be used as GPIOs or NFC, special case
    if ( (PinId == PIN_NFC1) &amp;amp;&amp;amp; ((NRF_UICR-&amp;gt;NFCPINS &amp;amp; UICR_NFCPINS_PROTECT_Msk) == (UICR_NFCPINS_PROTECT_NFC &amp;lt;&amp;lt; UICR_NFCPINS_PROTECT_Pos)) ) return &amp;quot;NFC 1&amp;quot;;
    if ( (PinId == PIN_NFC2) &amp;amp;&amp;amp; ((NRF_UICR-&amp;gt;NFCPINS &amp;amp; UICR_NFCPINS_PROTECT_Msk) == (UICR_NFCPINS_PROTECT_NFC &amp;lt;&amp;lt; UICR_NFCPINS_PROTECT_Pos)) ) return &amp;quot;NFC 2&amp;quot;;

    // Reset pin can be used as GPIOs or nReset, special case
    if ((PinId == PIN_NRESET)                          // 21
     &amp;amp;&amp;amp; ((NRF_UICR-&amp;gt;PSELRESET[0] &amp;amp; UICR_PSELRESET_CONNECT_Msk) == (UICR_PSELRESET_CONNECT_Connected &amp;lt;&amp;lt; UICR_PSELRESET_CONNECT_Pos))
     &amp;amp;&amp;amp; ((NRF_UICR-&amp;gt;PSELRESET[1] &amp;amp; UICR_PSELRESET_CONNECT_Msk) == (UICR_PSELRESET_CONNECT_Connected &amp;lt;&amp;lt; UICR_PSELRESET_CONNECT_Pos))
     &amp;amp;&amp;amp;  (NRF_UICR-&amp;gt;PSELRESET[0] == PIN_NRESET)
     &amp;amp;&amp;amp;  (NRF_UICR-&amp;gt;PSELRESET[1] == PIN_NRESET) ) return &amp;quot;nRESET&amp;quot;;

#if defined(TRACE_D0_PIN) &amp;amp;&amp;amp; defined(TRACE_D1_PIN) &amp;amp;&amp;amp; defined(TRACE_D2_PIN) &amp;amp;&amp;amp; defined(TRACE_D3_PIN) &amp;amp;&amp;amp; defined(TRACE_CLK_PIN)
    // TRACE pins can be used as GPIOs or Trace, special case
    if ( (CoreDebug-&amp;gt;DEMCR &amp;amp; CoreDebug_DEMCR_TRCENA_Msk) == CoreDebug_DEMCR_TRCENA_Msk )
    {
        if (PinId == TRACE_D0_PIN)  return &amp;quot;TRACE D0&amp;quot;;  // 18
        if (PinId == TRACE_D1_PIN)  return &amp;quot;TRACE D1&amp;quot;;  // 16
        if (PinId == TRACE_D2_PIN)  return &amp;quot;TRACE D2&amp;quot;;  // 15
        if (PinId == TRACE_D3_PIN)  return &amp;quot;TRACE D3&amp;quot;;  // 14
        if (PinId == TRACE_CLK_PIN) return &amp;quot;TRACE CLK&amp;quot;; // 20
    }
#endif

/*
 * Table 20: Peripherals sharing an ID
 *  ===================================
 *  Instance
 *  ID  3 (0x40003000) SPIM SPIS SPI TWIM TWIS TWI
 *  ID  4 (0x40004000) SPIM SPIS SPI TWIM TWIS TWI
 *  ID 35 (0x40023000) SPIM SPIS SPI
 */
STATIC_ASSERT ((uint32_t)NRF_TWIM0 == (uint32_t)NRF_SPI0, &amp;quot;NRF_TWIM0 differs from NRF_SPI0&amp;quot;);
STATIC_ASSERT ((uint32_t)NRF_TWIM1 == (uint32_t)NRF_SPI1, &amp;quot;NRF_TWIM1 differs from NRF_SPI1&amp;quot;);

    if (NRF_TWIM0-&amp;gt;PSEL.SCL  == PinId) return &amp;quot;SP-TWI0 SCL&amp;quot;;
    if (NRF_TWIM0-&amp;gt;PSEL.SDA  == PinId) return &amp;quot;SP-TWI0 SDA&amp;quot;;

    if (NRF_TWIM1-&amp;gt;PSEL.SCL  == PinId) return &amp;quot;SP-TWI1 SCL&amp;quot;;
    if (NRF_TWIM1-&amp;gt;PSEL.SDA  == PinId) return &amp;quot;SP-TWI1 SDA&amp;quot;;

    if (NRF_SPI0-&amp;gt;PSEL.SCK  == PinId) return &amp;quot;SPI0 SCK&amp;quot;;
    if (NRF_SPI0-&amp;gt;PSEL.MOSI == PinId) return &amp;quot;SPI0 MOSI&amp;quot;;
    if (NRF_SPI0-&amp;gt;PSEL.MISO == PinId) return &amp;quot;SPI0 MISO&amp;quot;;

    if (NRF_SPI1-&amp;gt;PSEL.SCK  == PinId) return &amp;quot;SPI1 SCK&amp;quot;;
    if (NRF_SPI1-&amp;gt;PSEL.MOSI == PinId) return &amp;quot;SPI1 MOSI&amp;quot;;
    if (NRF_SPI1-&amp;gt;PSEL.MISO == PinId) return &amp;quot;SPI1 MISO&amp;quot;;

    if (NRF_SPI2-&amp;gt;PSEL.SCK  == PinId) return &amp;quot;SPI2 SCK&amp;quot;;
    if (NRF_SPI2-&amp;gt;PSEL.MOSI == PinId) return &amp;quot;SPI2 MOSI&amp;quot;;
    if (NRF_SPI2-&amp;gt;PSEL.MISO == PinId) return &amp;quot;SPI2 MISO&amp;quot;;

    if (NRF_UARTE0-&amp;gt;PSEL.RTS == PinId) return &amp;quot;UartE0 RTS&amp;quot;;
    if (NRF_UARTE0-&amp;gt;PSEL.CTS == PinId) return &amp;quot;UartE0 CTS&amp;quot;;
    if (NRF_UARTE0-&amp;gt;PSEL.TXD == PinId) return &amp;quot;UartE0 Tx&amp;quot;;
    if (NRF_UARTE0-&amp;gt;PSEL.RXD == PinId) return &amp;quot;UartE0 Rx&amp;quot;;

    // Analog positive and negative input channels have strange numbering:
    // PSELP_NC           0UL  Not connected
    // PSELP_AnalogInput0 1UL  AIN0
    // PSELP_AnalogInput1 2UL  AIN1
    // PSELP_AnalogInput2 3UL  AIN2
    // PSELP_AnalogInput3 4UL  AIN3
    // PSELP_AnalogInput4 5UL  AIN4
    // PSELP_AnalogInput5 6UL  AIN5
    // PSELP_AnalogInput6 7UL  AIN6
    // PSELP_AnalogInput7 8UL  AIN7
    // PSELP_VDD          9UL  VDD
    if (((PinId &amp;gt;= 2) &amp;amp;&amp;amp; (PinId &amp;lt;= 5)) || ((PinId &amp;gt;= 28) &amp;amp;&amp;amp; (PinId &amp;lt;= 31)))
    {
      uint32_t PinIdA = 0;
      if ((PinId &amp;gt;= 2) &amp;amp;&amp;amp; (PinId &amp;lt;= 5))
      {
        PinIdA = PinId-1;
      }
      else if ((PinId &amp;gt;= 28) &amp;amp;&amp;amp; (PinId &amp;lt;= 31))
      {
        PinIdA = 4+(PinId-28);
      }
      if (NRF_SAADC-&amp;gt;CH[0].PSELP == PinIdA) return &amp;quot;ADC 0+&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[0].PSELN == PinIdA) return &amp;quot;ADC 0-&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[1].PSELP == PinIdA) return &amp;quot;ADC 1+&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[1].PSELN == PinIdA) return &amp;quot;ADC 1-&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[2].PSELP == PinIdA) return &amp;quot;ADC 2+&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[2].PSELN == PinIdA) return &amp;quot;ADC 2-&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[3].PSELP == PinIdA) return &amp;quot;ADC 3+&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[3].PSELN == PinIdA) return &amp;quot;ADC 3-&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[4].PSELP == PinIdA) return &amp;quot;ADC 4+&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[4].PSELN == PinIdA) return &amp;quot;ADC 4-&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[5].PSELP == PinIdA) return &amp;quot;ADC 5+&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[5].PSELN == PinIdA) return &amp;quot;ADC 5-&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[6].PSELP == PinIdA) return &amp;quot;ADC 6+&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[6].PSELN == PinIdA) return &amp;quot;ADC 6-&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[7].PSELP == PinIdA) return &amp;quot;ADC 7+&amp;quot;;
      if (NRF_SAADC-&amp;gt;CH[7].PSELN == PinIdA) return &amp;quot;ADC 7-&amp;quot;;
    }

    if (NRF_LPCOMP-&amp;gt;PSEL      == PinId) return &amp;quot;LP COMP&amp;quot;;
    if (NRF_LPCOMP-&amp;gt;EXTREFSEL == PinId) return &amp;quot;LP COMP REF&amp;quot;;

    if (NRF_COMP-&amp;gt;PSEL      == PinId) return &amp;quot;COMP&amp;quot;;
    if (NRF_COMP-&amp;gt;EXTREFSEL == PinId) return &amp;quot;COMP REF&amp;quot;;

    if (NRF_QDEC-&amp;gt;PSEL.LED == PinId) return &amp;quot;QDEC LED&amp;quot;;
    if (NRF_QDEC-&amp;gt;PSEL.A   == PinId) return &amp;quot;QDEC A&amp;quot;;
    if (NRF_QDEC-&amp;gt;PSEL.B   == PinId) return &amp;quot;QDEC B&amp;quot;;

    if (NRF_PDM-&amp;gt;PSEL.CLK == PinId) return &amp;quot;PDM CLK&amp;quot;;
    if (NRF_PDM-&amp;gt;PSEL.DIN == PinId) return &amp;quot;PDM DIN&amp;quot;;

    if (NRF_PWM0-&amp;gt;PSEL.OUT[0] == PinId) return &amp;quot;PWM0 0&amp;quot;;
    if (NRF_PWM0-&amp;gt;PSEL.OUT[1] == PinId) return &amp;quot;PWM0 1&amp;quot;;
    if (NRF_PWM0-&amp;gt;PSEL.OUT[2] == PinId) return &amp;quot;PWM0 2&amp;quot;;
    if (NRF_PWM0-&amp;gt;PSEL.OUT[3] == PinId) return &amp;quot;PWM0 3&amp;quot;;

    if (NRF_PWM1-&amp;gt;PSEL.OUT[0] == PinId) return &amp;quot;PWM1 0&amp;quot;;
    if (NRF_PWM1-&amp;gt;PSEL.OUT[1] == PinId) return &amp;quot;PWM1 1&amp;quot;;
    if (NRF_PWM1-&amp;gt;PSEL.OUT[2] == PinId) return &amp;quot;PWM1 2&amp;quot;;
    if (NRF_PWM1-&amp;gt;PSEL.OUT[3] == PinId) return &amp;quot;PWM1 3&amp;quot;;

    if (NRF_PWM2-&amp;gt;PSEL.OUT[0] == PinId) return &amp;quot;PWM2 0&amp;quot;;
    if (NRF_PWM2-&amp;gt;PSEL.OUT[1] == PinId) return &amp;quot;PWM2 1&amp;quot;;
    if (NRF_PWM2-&amp;gt;PSEL.OUT[2] == PinId) return &amp;quot;PWM2 2&amp;quot;;
    if (NRF_PWM2-&amp;gt;PSEL.OUT[3] == PinId) return &amp;quot;PWM2 3&amp;quot;;

    if (NRF_I2S-&amp;gt;PSEL.SDOUT == PinId) return &amp;quot;I2S SDOUT&amp;quot;;
    if (NRF_I2S-&amp;gt;PSEL.SDIN  == PinId) return &amp;quot;I2S SDIN&amp;quot;;
    if (NRF_I2S-&amp;gt;PSEL.SCK   == PinId) return &amp;quot;I2S SCK&amp;quot;;
    if (NRF_I2S-&amp;gt;PSEL.MCK   == PinId) return &amp;quot;I2S MCK&amp;quot;;
    if (NRF_I2S-&amp;gt;PSEL.LRCK  == PinId) return &amp;quot;I2S LRCK&amp;quot;;

    if (NRF_PDM-&amp;gt;PSEL.DIN   == PinId) return &amp;quot;PDM DIN&amp;quot;;
    if (NRF_PDM-&amp;gt;PSEL.CLK   == PinId) return &amp;quot;PDM CLK&amp;quot;;

// Some peripherals are only available on nRF52840
#if defined(NRF52840_XXAA) || defined(NRF52840_XXAB)
    if (NRF_SPIM3-&amp;gt;PSEL.SCK  == PinId) return &amp;quot;SPI3 SCK&amp;quot;;
    if (NRF_SPIM3-&amp;gt;PSEL.MOSI == PinId) return &amp;quot;SPI3 MOSI&amp;quot;;
    if (NRF_SPIM3-&amp;gt;PSEL.MISO == PinId) return &amp;quot;SPI3 MISO&amp;quot;;
    if (NRF_SPIM3-&amp;gt;PSEL.CSN  == PinId) return &amp;quot;SPI3 CSN&amp;quot;;
    if (NRF_SPIM3-&amp;gt;PSELDCX   == PinId) return &amp;quot;SPI3 DCX&amp;quot;;

    if (NRF_UARTE1-&amp;gt;PSEL.RTS == PinId) return &amp;quot;UartE1 RTS&amp;quot;;
    if (NRF_UARTE1-&amp;gt;PSEL.CTS == PinId) return &amp;quot;UartE1 CTS&amp;quot;;
    if (NRF_UARTE1-&amp;gt;PSEL.TXD == PinId) return &amp;quot;UartE1 Tx&amp;quot;;
    if (NRF_UARTE1-&amp;gt;PSEL.RXD == PinId) return &amp;quot;UartE1 Rx&amp;quot;;

    if (NRF_PWM3-&amp;gt;PSEL.OUT[0] == PinId) return &amp;quot;PWM3 0&amp;quot;;
    if (NRF_PWM3-&amp;gt;PSEL.OUT[1] == PinId) return &amp;quot;PWM3 1&amp;quot;;
    if (NRF_PWM3-&amp;gt;PSEL.OUT[2] == PinId) return &amp;quot;PWM3 2&amp;quot;;
    if (NRF_PWM3-&amp;gt;PSEL.OUT[3] == PinId) return &amp;quot;PWM3 3&amp;quot;;
#endif

    if ((NRF_GPIOTE-&amp;gt;CONFIG[0] &amp;amp; GPIOTE_CONFIG_PSEL_Msk) == (PinId &amp;lt;&amp;lt; GPIOTE_CONFIG_PSEL_Pos)) return &amp;quot;GPIOTE 0&amp;quot;;
    if ((NRF_GPIOTE-&amp;gt;CONFIG[1] &amp;amp; GPIOTE_CONFIG_PSEL_Msk) == (PinId &amp;lt;&amp;lt; GPIOTE_CONFIG_PSEL_Pos)) return &amp;quot;GPIOTE 1&amp;quot;;
    if ((NRF_GPIOTE-&amp;gt;CONFIG[2] &amp;amp; GPIOTE_CONFIG_PSEL_Msk) == (PinId &amp;lt;&amp;lt; GPIOTE_CONFIG_PSEL_Pos)) return &amp;quot;GPIOTE 2&amp;quot;;
    if ((NRF_GPIOTE-&amp;gt;CONFIG[3] &amp;amp; GPIOTE_CONFIG_PSEL_Msk) == (PinId &amp;lt;&amp;lt; GPIOTE_CONFIG_PSEL_Pos)) return &amp;quot;GPIOTE 3&amp;quot;;
    if ((NRF_GPIOTE-&amp;gt;CONFIG[4] &amp;amp; GPIOTE_CONFIG_PSEL_Msk) == (PinId &amp;lt;&amp;lt; GPIOTE_CONFIG_PSEL_Pos)) return &amp;quot;GPIOTE 4&amp;quot;;
    if ((NRF_GPIOTE-&amp;gt;CONFIG[5] &amp;amp; GPIOTE_CONFIG_PSEL_Msk) == (PinId &amp;lt;&amp;lt; GPIOTE_CONFIG_PSEL_Pos)) return &amp;quot;GPIOTE 5&amp;quot;;
    if ((NRF_GPIOTE-&amp;gt;CONFIG[6] &amp;amp; GPIOTE_CONFIG_PSEL_Msk) == (PinId &amp;lt;&amp;lt; GPIOTE_CONFIG_PSEL_Pos)) return &amp;quot;GPIOTE 6&amp;quot;;
    if ((NRF_GPIOTE-&amp;gt;CONFIG[7] &amp;amp; GPIOTE_CONFIG_PSEL_Msk) == (PinId &amp;lt;&amp;lt; GPIOTE_CONFIG_PSEL_Pos)) return &amp;quot;GPIOTE 7&amp;quot;;

    // No hardware pins available with these peripherals:
    // NRF_TIMER0                      ((NRF_TIMER_Type          *) NRF_TIMER0_BASE)
    // NRF_TIMER1                      ((NRF_TIMER_Type          *) NRF_TIMER1_BASE)
    // NRF_TIMER2                      ((NRF_TIMER_Type          *) NRF_TIMER2_BASE)
    // NRF_RTC0                        ((NRF_RTC_Type            *) NRF_RTC0_BASE)
    // NRF_RTC1                        ((NRF_RTC_Type            *) NRF_RTC1_BASE)
    // NRF_RTC2                        ((NRF_RTC_Type            *) NRF_RTC2_BASE)

    // Default, no map found
    return &amp;quot;-&amp;quot;;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Sample output (example for nRF52840; also works on the nRF52832 etc):&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;&amp;lt;info&amp;gt; app: P0.00 Map: RTC-OSC-IN
&amp;lt;info&amp;gt; app: P0.01 Map: RTC-OSC-OUT
&amp;lt;info&amp;gt; app: P0.02 Map: -
&amp;lt;info&amp;gt; app: P0.03 Map: -
&amp;lt;info&amp;gt; app: P0.04 Map: -
&amp;lt;info&amp;gt; app: P0.05 Map: -
&amp;lt;info&amp;gt; app: P0.06 Map: -
&amp;lt;info&amp;gt; app: P0.07 Map: TRACE CLK
&amp;lt;info&amp;gt; app: P0.08 Map: -
&amp;lt;info&amp;gt; app: P0.09 Map: -
&amp;lt;info&amp;gt; app: P0.10 Map: -
&amp;lt;info&amp;gt; app: P0.11 Map: TRACE D2
&amp;lt;info&amp;gt; app: P0.12 Map: TRACE D1
&amp;lt;info&amp;gt; app: P0.13 Map: -
&amp;lt;info&amp;gt; app: P0.14 Map: -
&amp;lt;info&amp;gt; app: P0.15 Map: -
&amp;lt;info&amp;gt; app: P0.16 Map: -
&amp;lt;info&amp;gt; app: P0.17 Map: -
&amp;lt;info&amp;gt; app: P0.18 Map: nRESET
&amp;lt;info&amp;gt; app: P0.19 Map: -
&amp;lt;info&amp;gt; app: P0.20 Map: -
&amp;lt;info&amp;gt; app: P0.21 Map: -
&amp;lt;info&amp;gt; app: P0.22 Map: -
&amp;lt;info&amp;gt; app: P0.23 Map: -
&amp;lt;info&amp;gt; app: P0.24 Map: UartE0 Rx
&amp;lt;info&amp;gt; app: P0.25 Map: UartE0 Tx
&amp;lt;info&amp;gt; app: P0.26 Map: -
&amp;lt;info&amp;gt; app: P0.27 Map: -
&amp;lt;info&amp;gt; app: P0.28 Map: -
&amp;lt;info&amp;gt; app: P0.29 Map: -
&amp;lt;info&amp;gt; app: P0.30 Map: -
&amp;lt;info&amp;gt; app: P0.31 Map: -
&amp;lt;info&amp;gt; app: P1.00 Map: TRACE D0
&amp;lt;info&amp;gt; app: P1.01 Map: -
&amp;lt;info&amp;gt; app: P1.02 Map: -
&amp;lt;info&amp;gt; app: P1.03 Map: -
&amp;lt;info&amp;gt; app: P1.04 Map: -
&amp;lt;info&amp;gt; app: P1.05 Map: -
&amp;lt;info&amp;gt; app: P1.06 Map: -
&amp;lt;info&amp;gt; app: P1.07 Map: -
&amp;lt;info&amp;gt; app: P1.08 Map: -
&amp;lt;info&amp;gt; app: P1.09 Map: TRACE D3
&amp;lt;info&amp;gt; app: P1.10 Map: PWM0 1
&amp;lt;info&amp;gt; app: P1.11 Map: -
&amp;lt;info&amp;gt; app: P1.12 Map: -
&amp;lt;info&amp;gt; app: P1.13 Map: -
&amp;lt;info&amp;gt; app: P1.14 Map: -
&amp;lt;info&amp;gt; app: P1.15 Map: -&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Control E-Paper display with SPI.</title><link>https://devzone.nordicsemi.com/thread/464049?ContentTypeID=1</link><pubDate>Sun, 14 Jan 2024 09:37:43 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:89eb2fea-14d8-497b-9c5a-f4c5a37d5b9e</guid><dc:creator>Leschge</dc:creator><description>&lt;p&gt;Thanks for that info. I managed to get some feedback from the display using the default DeviceTree for DK and this setup:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;#define GIPO0_NODE DT_NODELABEL(gpio0)
static const struct device *gpio0_dev = DEVICE_DT_GET(GIPO0_NODE);

#define GPIO_CS 19
#define GPIO_DC 18
#define GPIO_RESET 17
#define GPIO_BUSY 16

#define SPI_NODE DT_NODELABEL(spi1)
const struct device *spi_dev = DEVICE_DT_GET(SPI_NODE);
static struct k_poll_signal spi_done_sig = K_POLL_SIGNAL_INITIALIZER(spi_done_sig);

struct spi_cs_control spim_cs = {
    .gpio = SPI_CS_GPIOS_DT_SPEC_GET(DT_NODELABEL(reg_my_spi_master)),
    .delay = 0,
};

static const struct spi_config spi_cfg = {
    .operation = SPI_WORD_SET(8) | SPI_TRANSFER_MSB |
                SPI_MODE_CPOL | SPI_MODE_CPHA,
    .frequency = 4000000,
    .slave = 0,
    //.cs = &amp;amp;spim_cs,
};
    // Configure GPIO pins
    int ret_cs = gpio_pin_configure(gpio0_dev, GPIO_CS, GPIO_OUTPUT | GPIO_INPUT);
    int ret_dc = gpio_pin_configure(gpio0_dev, GPIO_DC, GPIO_OUTPUT | GPIO_INPUT);
    int ret_reset = gpio_pin_configure(gpio0_dev, GPIO_RESET, GPIO_OUTPUT | GPIO_INPUT );
    int ret_busy = gpio_pin_configure(gpio0_dev, GPIO_BUSY, GPIO_OUTPUT | GPIO_INPUT);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Btw, I tried to simply set GPIO_CS as pin 0 or 1 (so&amp;nbsp;&lt;span&gt;P0.00 and&amp;nbsp;&lt;/span&gt;P0.01), but they didn&amp;#39;t work at all with gpio_pin_set. Verified it with a simple LED on that pin. Why&amp;nbsp;do the pins 16-19 work but others not?&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Control E-Paper display with SPI.</title><link>https://devzone.nordicsemi.com/thread/464045?ContentTypeID=1</link><pubDate>Sat, 13 Jan 2024 23:18:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:149c72eb-dbdd-49be-bc28-ce176bf15c0f</guid><dc:creator>hmolesworth</dc:creator><description>&lt;p&gt;E-paper display at 4MHz with connections that are not vanishingly short (ie always) require high-drive outputs, aka H0H1 as opposed to the default S0S1; these high-drive output modes are not available on all pins on some parts. The Overlay above has this set in one section but not the SPI definition; suggest try adding this line:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;    spi_master_default: spi_master_default {
        group1 {
            psels = &amp;lt;NRF_PSEL(SPIM_SCK, 0, 26)&amp;gt;,
                    &amp;lt;NRF_PSEL(SPIM_MOSI, 0, 27)&amp;gt;,
                    &amp;lt;NRF_PSEL(SPIM_MISO, 0, 29)&amp;gt;;
                    nordic,drive-mode = &amp;lt;NRF_DRIVE_H0H1&amp;gt;; // &amp;lt;&amp;lt;== require high-drive
        };
    };&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Depending on package some pins may (will) affect the radio if used for high-speed signals; on a module these typically are P0.27 to P0.31 and so are not the best choice for SPI.&lt;/p&gt;
&lt;p&gt;&amp;quot;&lt;em&gt;4.3.1 GPIO located near the radio&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Radio performance parameters, such as sensitivity, may be affected by high frequency digital I/O with large&amp;nbsp;sink/source current close to the Radio power supply and antenna pins.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Table 5: GPIO recommended usage for QFN48 package on page 18 and Table 6: GPIO recommended&amp;nbsp;usage for WLCSP package on page 18 identify some GPIO that have recommended usage guidelines to&amp;nbsp;maximize radio performance in an application.&lt;/em&gt;&amp;quot;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Control E-Paper display with SPI.</title><link>https://devzone.nordicsemi.com/thread/464040?ContentTypeID=1</link><pubDate>Sat, 13 Jan 2024 11:55:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:86ba376e-bf59-40db-b755-adf32916266a</guid><dc:creator>Leschge</dc:creator><description>&lt;p&gt;Thank you for your answer. I have tried the bare example from too1, but face similar issues:&lt;br /&gt;&lt;a href="https://github.com/too1/ncs-spi-master-slave-example/issues/5"&gt;github.com/.../5&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Control E-Paper display with SPI.</title><link>https://devzone.nordicsemi.com/thread/463795?ContentTypeID=1</link><pubDate>Thu, 11 Jan 2024 14:37:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:33445843-4e68-4063-9442-dc0baa74e3da</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;Not tried it myself, but I can find there is a e-paper driver in nRF Connect SDK:&lt;br /&gt;&lt;a href="https://docs.zephyrproject.org/latest/boards/shields/waveshare_epaper/doc/index.html"&gt;https://docs.zephyrproject.org/latest/boards/shields/waveshare_epaper/doc/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I would likely have started there.&lt;/p&gt;
&lt;p&gt;If you just want to get SPI driver up and running, I would start off with the example by Torbjørn (and compile them as-is) first to confirm it is working as expected:&lt;br /&gt;&lt;a href="https://github.com/too1/ncs-spi-master-slave-example"&gt;https://github.com/too1/ncs-spi-master-slave-example&lt;/a&gt;&amp;nbsp;&lt;br /&gt;(overlay&amp;nbsp;&lt;a href="https://github.com/too1/ncs-spi-master-slave-example/blob/master/nrf52dk_nrf52832.overlay"&gt;https://github.com/too1/ncs-spi-master-slave-example/blob/master/nrf52dk_nrf52832.overlay&lt;/a&gt;)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Then connect a logic analyzer to measure on the actual data when developing your e-paper driver.&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>