Skip to main content
RBharol
Associate III
March 24, 2021
Question

Chip Select for Quad SPI on STM32H7

  • March 24, 2021
  • 2 replies
  • 2741 views

Hi,

I am using Quad SPI on SHT32H7 and I am looking at examples in STMcube. My question is: Is Chip select for the QSPI handled by the port (inside the silicon) once set or is it my driver function that needs to do it like I had to in regular SPI drivers? I can't find any place in examples all over where Chip select is handled by user functions of even HAL drivers.

This topic has been closed for replies.

2 replies

Bowman32
ST Employee
March 24, 2021

Hi @RBharol​ 

Do you mean where you can find the CS GPIO Pin configuration?

In the examples you can find it in msp file "stm32h7xx_hal_msp.c". Once the QUADSPI_CS GPIO pin configured, it is automatically managed by the QUADSPI.

Bouraoui

RBharol
RBharolAuthor
Associate III
March 24, 2021

Thanks, Bouraoui,

>> it is automatically managed by the QUADSPI.

That answers my question. Does it mean this limits the number of devices we can have on QSPI?

Tesla DeLorean
Guru
March 24, 2021

The NCS pin is managed by the QSPI peripheral, there are a limited number of choices, and the routing is controlled by the AF association in the GPIO configuration.

Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
Tesla DeLorean
Guru
March 24, 2021

STM32Cube_FW_H7_V1.5.0\Drivers\BSP\STM32H743I_EVAL\stm32h743i_eval_qspi.h

/* Definition for QSPI clock resources */
#define QSPI_CLK_ENABLE() __HAL_RCC_QSPI_CLK_ENABLE()
#define QSPI_CLK_DISABLE() __HAL_RCC_QSPI_CLK_DISABLE()
#define QSPI_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define QSPI_BK1_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define QSPI_BK1_D0_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define QSPI_BK1_D1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define QSPI_BK1_D2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define QSPI_BK1_D3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define QSPI_BK2_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define QSPI_BK2_D0_GPIO_CLK_ENABLE() __HAL_RCC_GPIOH_CLK_ENABLE()
#define QSPI_BK2_D1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOH_CLK_ENABLE()
#define QSPI_BK2_D2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define QSPI_BK2_D3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
 
 
#define QSPI_FORCE_RESET() __HAL_RCC_QSPI_FORCE_RESET()
#define QSPI_RELEASE_RESET() __HAL_RCC_QSPI_RELEASE_RESET()
 
/* Definition for QSPI Pins */
#define QSPI_CLK_PIN GPIO_PIN_2
#define QSPI_CLK_GPIO_PORT GPIOB
/* Bank 1 */
#define QSPI_BK1_CS_PIN GPIO_PIN_6
#define QSPI_BK1_CS_GPIO_PORT GPIOG
#define QSPI_BK1_D0_PIN GPIO_PIN_8
#define QSPI_BK1_D0_GPIO_PORT GPIOF
#define QSPI_BK1_D1_PIN GPIO_PIN_9
#define QSPI_BK1_D1_GPIO_PORT GPIOF
#define QSPI_BK1_D2_PIN GPIO_PIN_7
#define QSPI_BK1_D2_GPIO_PORT GPIOF
#define QSPI_BK1_D3_PIN GPIO_PIN_6
#define QSPI_BK1_D3_GPIO_PORT GPIOF
 
/* Bank 2 */
#define QSPI_BK2_CS_PIN GPIO_PIN_11
#define QSPI_BK2_CS_GPIO_PORT GPIOC
#define QSPI_BK2_D0_PIN GPIO_PIN_2
#define QSPI_BK2_D0_GPIO_PORT GPIOH
#define QSPI_BK2_D1_PIN GPIO_PIN_3
#define QSPI_BK2_D1_GPIO_PORT GPIOH
#define QSPI_BK2_D2_PIN GPIO_PIN_9
#define QSPI_BK2_D2_GPIO_PORT GPIOG
#define QSPI_BK2_D3_PIN GPIO_PIN_14
#define QSPI_BK2_D3_GPIO_PORT GPIOG
/**
 * @brief QSPI MSP Initialization
 * This function configures the hardware resources used in this example:
 * - Peripheral's clock enable
 * - Peripheral's GPIO Configuration
 * - NVIC configuration for QSPI interrupt
 * @retval None
 */
__weak void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params)
{
 GPIO_InitTypeDef gpio_init_structure;
 
 /*##-1- Enable peripherals and GPIO Clocks #################################*/
 /* Enable the QuadSPI memory interface clock */
 QSPI_CLK_ENABLE();
 /* Reset the QuadSPI memory interface */
 QSPI_FORCE_RESET();
 QSPI_RELEASE_RESET();
 /* Enable GPIO clocks */
 QSPI_CLK_GPIO_CLK_ENABLE();
 QSPI_BK1_CS_GPIO_CLK_ENABLE();
 QSPI_BK1_D0_GPIO_CLK_ENABLE();
 QSPI_BK1_D1_GPIO_CLK_ENABLE();
 QSPI_BK1_D2_GPIO_CLK_ENABLE();
 QSPI_BK1_D3_GPIO_CLK_ENABLE();
 
 QSPI_BK2_CS_GPIO_CLK_ENABLE();
 QSPI_BK2_D0_GPIO_CLK_ENABLE();
 QSPI_BK2_D1_GPIO_CLK_ENABLE();
 QSPI_BK2_D2_GPIO_CLK_ENABLE();
 QSPI_BK2_D3_GPIO_CLK_ENABLE();
 
 /*##-2- Configure peripheral GPIO ##########################################*/
 /* QSPI CLK GPIO pin configuration */
 gpio_init_structure.Pin = QSPI_CLK_PIN;
 gpio_init_structure.Mode = GPIO_MODE_AF_PP;
 gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
 gpio_init_structure.Pull = GPIO_NOPULL;
 gpio_init_structure.Alternate = GPIO_AF9_QUADSPI;
 HAL_GPIO_Init(QSPI_CLK_GPIO_PORT, &gpio_init_structure);
 
 /* QSPI CS GPIO pin configuration */
 gpio_init_structure.Pin = QSPI_BK1_CS_PIN;
 gpio_init_structure.Pull = GPIO_PULLUP;
 gpio_init_structure.Alternate = GPIO_AF10_QUADSPI;
 HAL_GPIO_Init(QSPI_BK1_CS_GPIO_PORT, &gpio_init_structure);
 
 gpio_init_structure.Pin = QSPI_BK2_CS_PIN;
 gpio_init_structure.Mode = GPIO_MODE_AF_PP;
 gpio_init_structure.Pull = GPIO_PULLUP;
 gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
 gpio_init_structure.Alternate = GPIO_AF9_QUADSPI;
 HAL_GPIO_Init(QSPI_BK2_CS_GPIO_PORT, &gpio_init_structure);
...

Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
RBharol
RBharolAuthor
Associate III
March 24, 2021

Thanks.

What do Bank 1 ann Bank 2 signify?