Skip to main content
Associate
November 14, 2024
Solved

SPI and I2C Pin Conflict Issue on NUCLEO-L412KB

  • November 14, 2024
  • 1 reply
  • 3346 views

 

Hardware Setup

  • Board: NUCLEO-L412KB
  • Peripherals:
    • SD Card (SPI1)
    • Temperature Sensor (I2C1)

Original Pin Configuration (SPI Not Working properly)

SD Card (SPI1):
CS: PA5
MISO: PA6
MOSI: PA7
CK: PA1
Temperature Sensor (I2C1):
SDA: PB7
SCL: PB6

Issue Description

When using both SPI1 and I2C1 peripherals simultaneously with the above pin configuration, the SPI communication fails to work properly. Interestingly, when commenting out the I2C initialization, the SPI communication functions correctly.

Working Solution

I resolved the issue by remapping the pins as follows:

 

 
Modified Pins:
SPI1_MOSI: Changed to PB5
I2C1_SDA: Changed to PA10
I2C1_SCL: Changed to PA9

After this remapping, both peripherals work correctly together.

Suggestion

This pin conflict might be worth documenting in the board's errata, as the original configuration leads to unexpected behavior when using these common peripherals together.

Has anyone else encountered similar issues with this board when using SPI1 and I2C1 simultaneously?

Best answer by marianoo2001

Hey, my intention was only red flagging this situation in case it was clear why this was happening. 
But if it is not it is not worth it to keep digging since for me, with this remapping I mentioned it worked.

THank you very much for your time. I will set this thread solved.

1 reply

ELABI.1
Technical Moderator
November 14, 2024

Hi @marianoo2001 

For the SPI1 configuration, why did you choose pin PA5 as CS? According to the datasheet, pins PA4 and PB0 can be used as CS, while pin PA5 is used for SCK.

Have you tried configuring I2C with pins PB7 & PB6 alone without using SPI1? If so, did it work or not? This would help determine if the issue is related to I2C.

Thank you.

ELABI.1

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
Associate
November 14, 2024

Hi @ELABI.1,

Let me clarify regarding your questions:

  1. Regarding PA5 as CS:
    • I'm using PA5 as a General Purpose Output (GPIO), not as the SPI1_NSS pin
    • The CS control is handled by the SD Card Library through this GPIO
    • PA1 is used for SPI1_SCK (clock), not PA5
  2. Regarding I2C1 testing:
    • Yes, I tested I2C1 (PB7 & PB6) alone first - it worked perfectly
    • The issue only appeared when combining both peripherals

To better explain the sequence of events:

  1. Initial setup with SPI1 worked fine:
    SD Card (SPI1):- CS (GPIO): PA5- MISO: PA6- MOSI: PA7- SCK: PA1
  2. The problem emerged when:
  • Started fresh project
  • Configured SPI1 + SD Card libraries -> Working correctly
  • Added I2C1 (PB7&PB6) in IOC -> SD card stopped mounting
  • Disabled I2C1 in IOC -> SD card worked again
  1. This suggests a peripheral conflict rather than a pin configuration issue. After finding similar issues documented in other STM32 erratas, I resolved it by remapping:

    • SPI1_MOSI to PB5
    • I2C1_SDA to PA10
    • I2C1_SCL to PA9

    Now both peripherals work correctly together. Hope this helps clarify the situation.

Thanks in advance.

 

Andrew Neil
Super User
November 15, 2024

@marianoo2001 wrote:
  1. This suggests a peripheral conflict .


Or a problem in the software.

Have you tried debugging why the  SD Card is not mounting?

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.