你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

正点原子 QSPI通信实验 读写SPI FLASH 失败

[复制链接]
pinganbo 提问时间:2020-6-15 16:02 /
硬件:正点原子北极星 STM32H750
开发环境: cubeMX + HAL
根据原理图配置相关引脚
采用的是:Bank1 with Quad SPI Lines/四线Bank1模式
    PB6     ------> QUADSPI_BK1_NCS
    PF6     ------> QUADSPI_BK1_IO3
    PF7     ------> QUADSPI_BK1_IO2
    PF8     ------> QUADSPI_BK1_IO0
    PF9     ------> QUADSPI_BK1_IO1
    PB2     ------> QUADSPI_CLK

现在的问题,编译啥的都通过了,0错误,0警告,下载debug ITM显示打印失败。不知道是哪里的问题,请大佬帮忙看一下。
参考的程序是银杏科技论坛里的技术文档http://www.gkwiki.cn/doku.php?id=icore4t_13

参考网上的程序:main.c如下:
int main(void)
{
  /* USER CODE BEGIN 1 */
        int i;
        int temp;
        unsigned char write_buffer[4096];
        unsigned char read_buffer[4096];
  /* USER CODE END 1 */

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_QUADSPI_Init();
  MX_USART3_UART_Init();

  /* USER CODE BEGIN 2 */
        BSP_QSPI_Init();
        printf("W25Q64 QuadSPI Test....\r\n\r\n");
        temp = BSP_QSPI_FLASH_ReadID();
        printf("FLASH ID: 0x%X\r\n\r\n",temp);
//write
        for(i = 0;i < 4096;i ++)
        {
         write_buffer = i % 256;  
        read_buffer = 0;
        }
        BSP_QSPI_Write(write_buffer,0,4096); //写数据
        BSP_QSPI_Read(read_buffer,0,4096); //读数据
        for(i = 0;i < 4096;i ++)
        {
         
if(read_buffer != write_buffer)
                 {
                        printf("FLASH ERROR!\r\n");//打印失败
                        while(1);
                 }
        }
        printf("FLASH TEST OK!\r\n");//打印成功
  /* USER CODE END 2 */

    while(1)
      {
      }
}


FLASH原理图.JPG
ITM.JPG
收藏 评论11 发布时间:2020-6-15 16:02

举报

11个回答
pinganbo 回答时间:2020-6-15 16:24:57
原贴有误,不知道为什么在原贴里修改不了,只能回复修改如下:
write_buffer = i % 256  ——》 write_buffer[i] = i % 256;  
read_buffer = 0;          ——》  read_buffer[i] = 0;
if(read_buffer != write_buffer) ——》 if(read_buffer[i] != write_buffer[i])
神圣雅诗人 回答时间:2020-6-15 16:56:05
签到
litaogoo 回答时间:2020-6-15 16:58:48
既然ID都读出来了,那说明接线配置这些没有什么问题了,QSPI的接口可以是nor flash、nand flash等,这个时候你就需要仔细去看手册了,看看它的读写命令寄存器设置这些

评分

参与人数 1蝴蝶豆 +4 收起 理由
STMCU + 4

查看全部评分

litaogoo 回答时间:2020-6-15 16:59:30
不同的芯片它的读写命令是不一样的
神圣雅诗人 回答时间:2020-6-16 08:11:54
签到
mylovemcu 回答时间:2020-6-16 08:22:48
看一下读写函数的格式对不对  在看一下读出来的数据是多少  确认一下是没有写进去还是没有读出来

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

pinganbo 回答时间:2020-6-16 14:20:19
mylovemcu 发表于 2020-6-16 08:22
看一下读写函数的格式对不对  在看一下读出来的数据是多少  确认一下是没有写进去还是没有读出来
...

我把程序改了一下,现在写应该没有问题,就是读不出来。而且我把地址都改成同样的从0开始,长度只是1位,但是写出来还是5个数,读不出来。有截图!请问能帮忙看一下吗?

BSP_QSPI_Write(write_buffer,0,1); //写数据
BSP_QSPI_Read(read_buffer,0,1); //读数据
都是从地址0开始,长度为1.

前面看别人的程序加的宏定义
#define countof(a)      (sizeof(a) / sizeof(*(a)))
#define BufferSize      (countof(write_buffer)-1)


捕获.JPG
pinganbo 回答时间:2020-6-16 14:22:42
litaogoo 发表于 2020-6-15 16:59
不同的芯片它的读写命令是不一样的

数组里的内容,可以写并且printf,但是从同样的位置一读就出错了。能帮忙看看是什么原因吗?见截图

BSP_QSPI_Write(write_buffer,0,1); //写数据
BSP_QSPI_Read(read_buffer,0,1); //读数据
都是从地址0开始,长度为1.前面看别人的程序加的宏定义
#define countof(a)      (sizeof(a) / sizeof(*(a)))
#define BufferSize      (countof(write_buffer)-1)


捕获.JPG
mylovemcu 回答时间:2020-6-16 15:43:38
ananbo 发表于 2020-6-16 14:20
我把程序改了一下,现在写应该没有问题,就是读不出来。而且我把地址都改成同样的从0开始,长度只是1位, ...

看一下你的读写函数怎么写的  写操作的时候用的是字符串写的  写函数能不能支持这是一个问题
看你的打印结果  写之前是没有数据的  写之后出现?  说明数据写进去了  但是写错了

主要是看一下  写函数对字符串是怎么操作的   写的是1 2 3 4 5这5个数字还是12345这一个数字  这需要写函数处理的  
pinganbo 回答时间:2020-6-16 16:23:27
mylovemcu 发表于 2020-6-16 15:43
看一下你的读写函数怎么写的  写操作的时候用的是字符串写的  写函数能不能支持这是一个问题
看你的打印 ...

BSP_QSPI_Write和BSP_QSPI_Read包在了stm32h750b_discovery_qspi.c里,详见截图!
write.JPG
read.JPG
lebment 回答时间:2020-8-25 20:48:47
原子的板子 去原子的社区提问

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版