Giovanni wrote:Are GPIO settings correct?
Giovanni
I think so, as GPIO pins are the same on the STM32H743 and for STM32H735. As for PORTC (PD2 are identical to PC8..PC12):
Code: Select all
/*
* GPIOC setup:
*
* PC0 - GPIOC_SPI1_CS2 (output pushpull).
* PC1 - GPIOC_4_20mA_1 (analog).
* PC2 - GPIOC_D_C (output pushpull).
* PC3 - GPIOC_4_20mA_2 (analog).
* PC4 - GPIOC_VPILOT (analog).
* PC5 - GPIOC_PIN5 (input pullup).
* PC6 - GPIOC_DIO0 (input pullup).
* PC7 - GPIOC_SENSOR4 (input pullup).
* PC8 - GPIOC_SDMMC1_D0 (alternate 12).
* PC9 - GPIOC_SDMMC1_D1 (alternate 12).
* PC10 - GPIOC_SDMMC1_D2 (alternate 12).
* PC11 - GPIOC_SDMMC1_D3 (alternate 12).
* PC12 - GPIOC_SDMMC1_CK (alternate 12).
* PC13 - GPIOC_SW2 (input pullup).
* PC14 - GPIOC_OSC32_IN (input floating).
* PC15 - GPIOC_OSC32_OUT (input floating).
*/
#define VAL_GPIOC_MODER (PIN_MODE_OUTPUT(GPIOC_SPI1_CS2) | \
PIN_MODE_ANALOG(GPIOC_4_20mA_1) | \
PIN_MODE_INPUT(GPIOC_D_C) | \
PIN_MODE_ANALOG(GPIOC_4_20mA_2) | \
PIN_MODE_ANALOG(GPIOC_VPILOT) | \
PIN_MODE_INPUT(GPIOC_PIN5) | \
PIN_MODE_INPUT(GPIOC_DIO0) | \
PIN_MODE_INPUT(GPIOC_SENSOR4) | \
PIN_MODE_ALTERNATE(GPIOC_SDMMC1_D0) | \
PIN_MODE_ALTERNATE(GPIOC_SDMMC1_D1) | \
PIN_MODE_ALTERNATE(GPIOC_SDMMC1_D2) | \
PIN_MODE_ALTERNATE(GPIOC_SDMMC1_D3) | \
PIN_MODE_ALTERNATE(GPIOC_SDMMC1_CK) | \
PIN_MODE_INPUT(GPIOC_SW2) | \
PIN_MODE_INPUT(GPIOC_OSC32_IN) | \
PIN_MODE_INPUT(GPIOC_OSC32_OUT))
#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_SPI1_CS2) | \
PIN_OTYPE_PUSHPULL(GPIOC_4_20mA_1) | \
PIN_OTYPE_PUSHPULL(GPIOC_D_C) | \
PIN_OTYPE_PUSHPULL(GPIOC_4_20mA_2) | \
PIN_OTYPE_PUSHPULL(GPIOC_VPILOT) | \
PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
PIN_OTYPE_PUSHPULL(GPIOC_DIO0) | \
PIN_OTYPE_PUSHPULL(GPIOC_SENSOR4) | \
PIN_OTYPE_PUSHPULL(GPIOC_SDMMC1_D0) | \
PIN_OTYPE_PUSHPULL(GPIOC_SDMMC1_D1) | \
PIN_OTYPE_PUSHPULL(GPIOC_SDMMC1_D2) | \
PIN_OTYPE_PUSHPULL(GPIOC_SDMMC1_D3) | \
PIN_OTYPE_PUSHPULL(GPIOC_SDMMC1_CK) | \
PIN_OTYPE_PUSHPULL(GPIOC_SW2) | \
PIN_OTYPE_PUSHPULL(GPIOC_OSC32_IN) | \
PIN_OTYPE_PUSHPULL(GPIOC_OSC32_OUT))
#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_HIGH(GPIOC_SPI1_CS2) | \
PIN_OSPEED_HIGH(GPIOC_4_20mA_1) | \
PIN_OSPEED_HIGH(GPIOC_D_C) | \
PIN_OSPEED_HIGH(GPIOC_4_20mA_2) | \
PIN_OSPEED_HIGH(GPIOC_VPILOT) | \
PIN_OSPEED_HIGH(GPIOC_PIN5) | \
PIN_OSPEED_HIGH(GPIOC_DIO0) | \
PIN_OSPEED_HIGH(GPIOC_SENSOR4) | \
PIN_OSPEED_HIGH(GPIOC_SDMMC1_D0) | \
PIN_OSPEED_HIGH(GPIOC_SDMMC1_D1) | \
PIN_OSPEED_HIGH(GPIOC_SDMMC1_D2) | \
PIN_OSPEED_HIGH(GPIOC_SDMMC1_D3) | \
PIN_OSPEED_HIGH(GPIOC_SDMMC1_CK) | \
PIN_OSPEED_HIGH(GPIOC_SW2) | \
PIN_OSPEED_HIGH(GPIOC_OSC32_IN) | \
PIN_OSPEED_HIGH(GPIOC_OSC32_OUT))
#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_SPI1_CS2) | \
PIN_PUPDR_FLOATING(GPIOC_4_20mA_1) | \
PIN_PUPDR_PULLUP(GPIOC_D_C) | \
PIN_PUPDR_FLOATING(GPIOC_4_20mA_2) | \
PIN_PUPDR_FLOATING(GPIOC_VPILOT) | \
PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
PIN_PUPDR_PULLUP(GPIOC_DIO0) | \
PIN_PUPDR_PULLUP(GPIOC_SENSOR4) | \
PIN_PUPDR_FLOATING(GPIOC_SDMMC1_D0) | \
PIN_PUPDR_FLOATING(GPIOC_SDMMC1_D1) | \
PIN_PUPDR_FLOATING(GPIOC_SDMMC1_D2) | \
PIN_PUPDR_FLOATING(GPIOC_SDMMC1_D3) | \
PIN_PUPDR_FLOATING(GPIOC_SDMMC1_CK) | \
PIN_PUPDR_PULLUP(GPIOC_SW2) | \
PIN_PUPDR_FLOATING(GPIOC_OSC32_IN) | \
PIN_PUPDR_FLOATING(GPIOC_OSC32_OUT))
#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_SPI1_CS2) | \
PIN_ODR_HIGH(GPIOC_4_20mA_1) | \
PIN_ODR_HIGH(GPIOC_D_C) | \
PIN_ODR_HIGH(GPIOC_4_20mA_2) | \
PIN_ODR_HIGH(GPIOC_VPILOT) | \
PIN_ODR_HIGH(GPIOC_PIN5) | \
PIN_ODR_HIGH(GPIOC_DIO0) | \
PIN_ODR_HIGH(GPIOC_SENSOR4) | \
PIN_ODR_LOW(GPIOC_SDMMC1_D0) | \
PIN_ODR_LOW(GPIOC_SDMMC1_D1) | \
PIN_ODR_LOW(GPIOC_SDMMC1_D2) | \
PIN_ODR_LOW(GPIOC_SDMMC1_D3) | \
PIN_ODR_LOW(GPIOC_SDMMC1_CK) | \
PIN_ODR_HIGH(GPIOC_SW2) | \
PIN_ODR_HIGH(GPIOC_OSC32_IN) | \
PIN_ODR_HIGH(GPIOC_OSC32_OUT))
#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_SPI1_CS2, 0U) | \
PIN_AFIO_AF(GPIOC_4_20mA_1, 0U) | \
PIN_AFIO_AF(GPIOC_D_C, 0U) | \
PIN_AFIO_AF(GPIOC_4_20mA_2, 0U) | \
PIN_AFIO_AF(GPIOC_VPILOT, 0U) | \
PIN_AFIO_AF(GPIOC_PIN5, 0U) | \
PIN_AFIO_AF(GPIOC_DIO0, 0U) | \
PIN_AFIO_AF(GPIOC_SENSOR4, 0U))
#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_SDMMC1_D0, 12U) | \
PIN_AFIO_AF(GPIOC_SDMMC1_D1, 12U) | \
PIN_AFIO_AF(GPIOC_SDMMC1_D2, 12U) | \
PIN_AFIO_AF(GPIOC_SDMMC1_D3, 12U) | \
PIN_AFIO_AF(GPIOC_SDMMC1_CK, 12U) | \
PIN_AFIO_AF(GPIOC_SW2, 0U) | \
PIN_AFIO_AF(GPIOC_OSC32_IN, 0U) | \
PIN_AFIO_AF(GPIOC_OSC32_OUT, 0U))
Code generated from STM32Cube also configured this values (I have also tested as PULLUP and PULLDOWN). One difference between Aliexpress boards and H735G-DK is that Aliexpress boards doesn't have voltage interface on SDIO pins.
I rather thinks it's a cache related problem, as I managed to initialice the AD Card using code from STM32Cube, but it fails on FatFS (both with Chibios included version and with STM32Cube). If I were able to completely avoid cache I could check it, but I don't know how to do it