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

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

[复制链接]
ananbo 提问时间: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个回答
ananbo 回答时间: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])
xwl3190217171 回答时间: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
不同的芯片它的读写命令是不一样的
xwl3190217171 回答时间:2020-6-16 08:11:54
签到
mylovemcu 回答时间:2020-6-16 08:22:48
看一下读写函数的格式对不对  在看一下读出来的数据是多少  确认一下是没有写进去还是没有读出来

评分

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

查看全部评分

ananbo 回答时间: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
ananbo 回答时间: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这一个数字  这需要写函数处理的  
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版