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

Errata 198 has additional restrictions and resource implications

Extended corruption occurs if DMA transfers for commands and data originate from the same RAM bank.

It is avoided if transfer of command bytes and transfer of data bytes originate from separate banks.

The sequence that causes corruption is:
• DMA transfer of command bytes (D/CX is low) from bank 1
• DMA transfer of data bytes (D/CX is high) from bank 1

The sequence that resolves the anomaly is:
• DMA transfer of command bytes (D/CX is low) from bank 1
• DMA transfer of data bytes (D/CX is high) from bank 2

The impact expands the suggested workaround described in the Errata. The workaround requires reserving 2 banks exclusively for SPIM3 DMA transfer (1 for command bytes, 1 for data bytes).

Parents
  • Hi, Mrowe.

    Could you share some piece of C code and .LD file how you actually worked out that issue?

    Did you separate the p_tx_buffer and p_rx_buffer from spim descriptor?


    typedef struct
    {
        uint8_t const * p_tx_buffer; ///< Pointer to TX buffer.
        size_t          tx_length;   ///< TX buffer length.
        uint8_t       * p_rx_buffer; ///< Pointer to RX buffer.
        size_t          rx_length;   ///< RX buffer length.
    } nrfx_spim_xfer_desc_t;
    

    And how you moved command and data bytes into separate banks.

    Your help will be greatly appreciated.

    Thanks a lot.

    BR

    Kaloian

Reply
  • Hi, Mrowe.

    Could you share some piece of C code and .LD file how you actually worked out that issue?

    Did you separate the p_tx_buffer and p_rx_buffer from spim descriptor?


    typedef struct
    {
        uint8_t const * p_tx_buffer; ///< Pointer to TX buffer.
        size_t          tx_length;   ///< TX buffer length.
        uint8_t       * p_rx_buffer; ///< Pointer to RX buffer.
        size_t          rx_length;   ///< RX buffer length.
    } nrfx_spim_xfer_desc_t;
    

    And how you moved command and data bytes into separate banks.

    Your help will be greatly appreciated.

    Thanks a lot.

    BR

    Kaloian

Children
No Data
Related