问答

汇集网友智慧,解决技术难题

gkcclm002

TA的家园币:12  

  • GD32F450 SQPI-PSRAM无法访问

    Hi我使用GD32F450,使用SQPI-PSRAM接口连接APM_PSRAM_QSPI_APS6404L,发现可以读到ID,但是读内存的时候就会发生HardFault。代码如下。1.读ID是constvolatileuint16_tid=EXMC_SIDL这一行,结果是正确的。2.HardFault是intval=*ptr;感觉是MCU这边什么地方没有配置。感觉有几个奇怪的地方:1.使用SQPI-PSRAM的时候,使用Bank0地址。但是Bank0也是给NorFlash使用的。那么如何选择呢?目前没有找到哪个寄存器配置的。2.使用SQPI接口的时候,SPICLK时钟频率是如何配置的?也没有找到。谢谢。#defineSTART_ADDR0x60000000#defineMAX_SIZESIZE_M(8)staticvoidgpio_config(void){typedefstruct{uint32_tport;uint32_tpin;}gpio_t;gpio_tgpios[]={{GPIOD,BIT(0)},//D2{GPIOD,BIT(1)},//D3{GPIOD,BIT(3)},//CLK{GPIOD,BIT(7)},//CS{GPIOD,BIT(14)},//D0{GPIOD,BIT(15)},//D1};rcu_periph_clock_enable(RCU_GPIOD);for(inti=0;i<ARRAY_ELEMENTS(gpios);i++){gpio_t*gpio=&gpios;gpio_mode_set(gpio->port,GPIO_MODE_AF,GPIO_PUPD_NONE,gpio->pin);gpio_af_set(gpio->port,GPIO_AF_12,gpio->pin);gpio_output_options_set(gpio->port,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,gpio->pin);}}staticvoidread_id(void){exmc_sqpipsram_read_command_set(EXMC_SQPIPSRAM_READ_MODE_SPI,0,0x9F);//waitEXMC_SRCMD_RDIDtobezerowhile(IS_BIT_SET(EXMC_SRCMD,EXMC_SRCMD_RDID)){}SET_BIT(EXMC_SRCMD,EXMC_SRCMD_RDID);//waitEXMC_SRCMD_RDIDtobezerowhile(IS_BIT_SET(EXMC_SRCMD,EXMC_SRCMD_RDID)){}constvolatileuint16_tid=EXMC_SIDL;//ID为0x0D5D,是正确的。printf("sdramid=%04x\n",id);}staticvoidconfig_as_normal_read(void){exmc_sqpipsram_read_command_set(EXMC_SQPIPSRAM_READ_MODE_SPI,0,0x03);}staticvoidsimple_test(void){volatilechar*ptr=(volatilechar*)START_ADDR;*ptr=1;intval=*ptr;//!!!!这里会发生HardFault*ptr=2;val=*

    pi PSRAM GD32F450 IO GPIO gp

    2024-12-25 0