Skip to content

Conversation

drmcnelson
Copy link

@drmcnelson drmcnelson commented Sep 23, 2024

Implement SPI.transfer16() as a true 16 bit transfer

Implement SPI.transfer16() as a true 16 bit transfer

Signed-off-by: Dr M <[email protected]>
@uzi18
Copy link

uzi18 commented Sep 23, 2024

Why did you removed defined(STM32U0xx) ?

@drmcnelson
Copy link
Author

Actually, I did not remove it either.

It was not in my version of that file. I will make the correction.

Correction,  defined(STM32U0xx)

Signed-off-by: Dr M <[email protected]>
@fpistm fpistm self-requested a review October 20, 2025 12:25
@stm32duino stm32duino deleted a comment from uzi18 Oct 21, 2025
@fpistm
Copy link
Member

fpistm commented Oct 21, 2025

Hi @drmcnelson
Sorry for the delay looking at this PR.

In fact there is a mistake. Using LL_SPI_TransmitData16 is not enough to properly transfer 16bit.

handle->Init.DataSize = SPI_DATASIZE_8BIT;

It requires to configure the data size to SPI_DATASIZE_16BIT.

So it should require to manage it.
Several way:

  1. Adding below code in spi_transfer16 (same for the spi_transfer with LL_SPI_DATAWIDTH_8BIT
  if (LL_SPI_GetDataWidth(_SPI) != LL_SPI_DATAWIDTH_16BIT) {
    /* Change data width to 16 bit */
    LL_SPI_Disable(_SPI);
    LL_SPI_SetDataWidth(_SPI, LL_SPI_DATAWIDTH_16BIT);
    LL_SPI_Enable(_SPI);
  }

This add at least 1 check per transfer.

  1. Kept transfer16 as it is and add a 2 new API, one to change the size and one to call LL_SPI_TransmitData16.

  2. Add an API to change the data size before calling the transfer16 but this will break all Arduino sketches.

  3. maybe other way...

@drmcnelson
Copy link
Author

@fpistm Wonderful, thank you, and thank for you looking at it.

How about a variable transfer size? Some ADCs are 18 bit (or larger) and some are daisy-chainable, so that transfers could be several times 18 bits (or larger). I have been doing this by hand for an acoustic imaging array, but with the new world of 32 bit processors and higher precision preripherals, maybe it's time to upgrade the SPI interface for everybody.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants