This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nrf52832 waveshare e-paper display spi driver help

Hi,

we are trying to use waveshare 2.9 epaper display with nrf52832, converted stm32 sample code to nrf52 with no luck. It seems we can not send command and data correctly to the display, it is not responding back via Busy line and program hangs on while loop. Can anybody help about this? We are using sdk 15's spi example with segger embedded studio.

I attached the code.spi.zip

Parents
  • Hi,

     

    The BUSY pin is an output (LOW = busy, HIGH = idle) from the e-paper, as stated in the datasheet, chapter 6: https://www.waveshare.com/w/upload/e/e6/2.9inch_e-Paper_Datasheet.pdf 

    Note 6-4: This pin (BUSY) is Busy state output pin. When Busy is Low the operation of chip should not be interrupted and any commands should not be issued to the module. The driver IC will put Busy pin Low when the driver IC is working such as: ...

     

    Given the above info, it looks like this pin shall be LOW when busy, but in your firmware, you seem to be looping over it incorrectly:

    /**
     *  @brief: Wait until the busy_pin goes LOW
     */
    void EPD_WaitUntilIdle(EPD* epd) {
      while(EPD_DigitalRead(epd, epd->busy_pin) == HIGH) {      //0: busy, 1: idle
        EPD_DelayMs(epd, 100);
        bsp_board_led_invert(BSP_BOARD_LED_0);
      }      
    }

    You need to set the loop to "== LOW" to loop while it's busy.

     

    Best regards,

    Håkon

Reply
  • Hi,

     

    The BUSY pin is an output (LOW = busy, HIGH = idle) from the e-paper, as stated in the datasheet, chapter 6: https://www.waveshare.com/w/upload/e/e6/2.9inch_e-Paper_Datasheet.pdf 

    Note 6-4: This pin (BUSY) is Busy state output pin. When Busy is Low the operation of chip should not be interrupted and any commands should not be issued to the module. The driver IC will put Busy pin Low when the driver IC is working such as: ...

     

    Given the above info, it looks like this pin shall be LOW when busy, but in your firmware, you seem to be looping over it incorrectly:

    /**
     *  @brief: Wait until the busy_pin goes LOW
     */
    void EPD_WaitUntilIdle(EPD* epd) {
      while(EPD_DigitalRead(epd, epd->busy_pin) == HIGH) {      //0: busy, 1: idle
        EPD_DelayMs(epd, 100);
        bsp_board_led_invert(BSP_BOARD_LED_0);
      }      
    }

    You need to set the loop to "== LOW" to loop while it's busy.

     

    Best regards,

    Håkon

Children
Related