配置了psram后, 可以通过qpi的接口往里写入, 并在配置ahb总线后可以通过映射地址读出。但是无法通过映射地址写入。 /* 片选选项 */ static const int cs = 0; static HS_SF_Type *sf = HS_SF3; static const psram_main_config_t sf_cfg = { .freq_hz = 64000000, .width = PSRAM_WIDTH_4LINE, .delay = 2 }; int psram_init(void) { for (int i = 0; i < sizeof(psram_pins) / sizeof(psram_pins[0]); i++) pinmux_config(psram_pins[i].pin_index, psram_pins[i].pin_function); // open psram_open(sf); // config psram_config(sf, cs, &sf_cfg); co_delay_ms(5); // 上电后延时一会再读写 /* 读id */ uint32_t id = psram_read_id(sf, cs); /* 进入qpi模式 */ psram_quad_enter(sf, cs); #if 1 /* 测试 */ CO_ALIGN(4) static uint8_t sf_write_buf1[100] ; for (int i = 0; i < sizeof(sf_write_buf1); ++i) sf_write_buf1[i] = i; #define SF_TEST_ADDRESS 0 //这个qspi写入经证实是没问题的 psram_write_quad_qpi(sf, cs, SF_TEST_ADDRESS, (uint8_t *)sf_write_buf1, sizeof(sf_write_buf1)); //配置成映射地址模式 psram_config_t config; config.cmd_p0_bit_cnt = 8; config.cmd_p0_width = WIDTH_4BITS; config.cmd_p1_width = WIDTH_4BITS; config.cmd_p1_bit_cnt = 24; config.sw_dummy_cycle_cnt = 6; config.sdata_width = WIDTH_4BITS; config.sw_cfg_en = 1; psram_sw_config(sf, 0, &config, 0); #define AHB_TEST_ADDRESS (0x60000000 + SF_TEST_ADDRESS)
volatile char *p = (char *)AHB_TEST_ADDRESS; for (int i = 0; i < sizeof(sf_write_buf1); i++) { log_info("0x%02X ", *p++); } log_info("\n\n"); volatile char *p_w = (char *)AHB_TEST_ADDRESS; //这一句写入会让系统卡死,触发看门狗 *p_w++ = 0x01; #endif return 0; } |