GD32F407在使用SPI2时读出flash_id为0XFFFFFF

[复制链接]
 楼主| wangkl11 发表于 2024-5-21 10:28 | 显示全部楼层 |阅读模式
请问有遇到这种情况么,怎么处理
 楼主| wangkl11 发表于 2024-5-21 10:30 | 显示全部楼层

GD32F407在使用SPI2时读出flash_id为0XFFFFFF

spi_parameter_struct spi_init_struct;

    rcu_periph_clock_enable(RCU_GPIOB);
          rcu_periph_clock_enable(RCU_GPIOC);
    rcu_periph_clock_enable(RCU_SPI2);

    /* SPI5_CLK(PB3), SPI5_MISO(PB4), SPI5_MOSI(PB5), SPI5_IO2(PC9) and SPI5_IO3(PC10) GPIO pin configuration */
    gpio_af_set(GPIOC, GPIO_AF_5, GPIO_PIN_10 | GPIO_PIN_9);
    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10 | GPIO_PIN_9);
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_10 | GPIO_PIN_9);

           gpio_af_set(GPIOB, GPIO_AF_5, GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ,  GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
       
    /* SPI5_CS(PC11) GPIO pin configuration */
    gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);

    SPI_FLASH_CS_HIGH();

    /* SPI5 parameter config */
    spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;//SPI在全双工通讯中接收/发送数据
    spi_init_struct.device_mode          = SPI_MASTER;//SPI为主机模式且SWNSS=1
    spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;//SPI使用8位数据帧格式
    spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;//在SPI为空闲状态时,CLK引脚拉低,且"在第1个时钟跳变沿时开始采集第1位数据"
    spi_init_struct.nss                  = SPI_NSS_SOFT;//使用NSS软件模式:NSS电平取决于SWNSS位;
    spi_init_struct.prescale             = SPI_PSC_32; //SPI预分频
    spi_init_struct.endian               = SPI_ENDIAN_MSB;//先发送高位
    spi_init(SPI2, &spi_init_struct);

    /* quad wire SPI_IO2 and SPI_IO3 pin output enable */
    spi_quad_io23_output_enable(SPI2);

    /* enable SPI5 */
    spi_enable(SPI2);
 楼主| wangkl11 发表于 2024-5-21 10:32 | 显示全部楼层

GD32F407在使用SPI2时读出flash_id为0XFFFFFF

flash_id=spi_flash_read_id();  //DBUG 出来 flash_id = 0x00ffffff
int32_t spi_flash_read_id(void)
{
    uint32_t temp = 0, temp0 = 0, temp1 = 0, temp2 = 0;

    /* select the flash: chip select low */
    SPI_FLASH_CS_LOW();

    /* send "RDID " instruction */
    spi_flash_send_byte(RDID);

    /* read a byte from the flash */
    temp0 = spi_flash_send_byte(DUMMY_BYTE);
    /* read a byte from the flash */
    temp1 = spi_flash_send_byte(DUMMY_BYTE);

    /* read a byte from the flash */
    temp2 = spi_flash_send_byte(DUMMY_BYTE);

    /* deselect the flash: chip select high */
    SPI_FLASH_CS_HIGH();

    temp = (temp0 << 16) | (temp1 << 8) | temp2;

    return temp;
}

trucyw 发表于 2024-5-21 15:59 | 显示全部楼层
有试过其他通道没有

评论

用PC10 11 12也是一样  发表于 2024-5-22 17:11
 楼主| wangkl11 发表于 2024-5-21 16:24 | 显示全部楼层
trucyw 发表于 2024-5-21 15:59
有试过其他通道没有

没用 只用了SPI2
trucyw 发表于 2024-5-22 08:25 | 显示全部楼层
可以试下其他SPI
 楼主| wangkl11 发表于 2024-5-22 10:06 | 显示全部楼层
trucyw 发表于 2024-5-22 08:25
可以试下其他SPI

GD32F407ZET6 要使用PB3和PB4,怎么禁止JTAG-DP
trucyw 发表于 2024-5-23 07:41 | 显示全部楼层
设置remap应该就可以,IO复用
laocuo1142 发表于 2024-5-23 11:56 | 显示全部楼层
SPI配置是否有误
flycamelaaa 发表于 2024-5-23 20:00 | 显示全部楼层
检查SPI数据线和控制线(如片选线)是否连接正确,并且没有短路或断路。
powerantone 发表于 2024-5-23 20:00 | 显示全部楼层
确认您发送的读取ID命令是Flash设备支持的,并且命令格式正确。
检查您是否等待了足够的时间让Flash设备响应读取请求。
stormwind123 发表于 2024-5-23 23:00 | 显示全部楼层
检查接收到的数据是否按字节正确接收,并考虑字节序(大端或小端)问题。
linyu0395 发表于 2024-5-28 10:46 | 显示全部楼层

GD32F407在使用SPI2时读出flash_id为0XFFFFFF

建议接个逻辑仪分析一下  线束不多  检测结果一目了然
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

34

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部