hpdell 发表于 2017-3-11 21:57:40

请教下我把 qspi的程序移植到另外的一个板子上死活都不行

本帖最后由 hpdell 于 2017-3-12 12:33 编辑


请教下,我把 qspi 的程序移植到另外的一个板子上,死活都不行,

qspi 的时钟等也都开启了,管脚也都配置了(移植前与移植后的管脚功能分配是一样的),管脚时钟也都开了,

移植后的程序可以读出 芯片 ID,但是不能够读写,

移植前与移植后的程序都是一样,所以现在迷茫了,

现在也找不出问题出在哪里了,

wye11083 发表于 2017-3-12 12:40:51

你确定硬件是支持的?qspi还要先写status reg 2,再发一条进入指令才行,你看rs2是不是0,0的话芯片没配好。

hpdell 发表于 2017-3-12 13:04:05

wye11083 发表于 2017-3-12 12:40
你确定硬件是支持的?qspi还要先写status reg 2,再发一条进入指令才行,你看rs2是不是0,0的话芯片没配好 ...

你好,硬件确定支持的,

芯片使用的 W25Q256A 这个 qspi的芯片,而且管脚也是参照之前的那个板子分配的,

读写程序也是 之前的那套程序

QSPI_StaticTypeDef QSPI_Quad_Enter(void)
{
uint8_t _RegVal = 0;
__IO uint32_t cnt = 0;

QSPI_Read_SR(QSPI_READ_STATUS_REG2_CMD, &_RegVal);   //先读出状态寄存器2的原始值
if((_RegVal & 0x02) == 0)                            //QE位未使能
{
    if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK)
    {
      return QSPI_ERROR;
    }
    _RegVal |= 1 << 1;                                    //使能QE位
    QSPI_Write_SR(QSPI_WRITE_STATUS_REG2_CMD, _RegVal);    //写状态寄存器2
}

_RegVal = 0;// 这个值无意义,只是配合下面的 发送 QSPI 指令 函数而已

if(QSPI_SendCmdData(QSPI_ENTER_QPI_MODE,      // 进入QSPI模式
                     QSPI_INSTRUCTION_1_LINE,
                     QSPI_ADDRESS_NONE,
                     QSPI_ADDRESS_8_BITS,
                     QSPI_DATA_NONE,
                     0,
                     0,
                     0,
                     &_RegVal,
                     QSPI_SEND_CMD
                  ) != QSPI_OK )
{
    return QSPI_ERROR;
}

return QSPI_OK;
}

wye11083 发表于 2017-3-12 13:17:46

你查一下,在没进入QSPI模式时要用标准SPI模式去读写SR2,而且切记:写SR2之后务必等待芯片写入完成!否则不响应你的命令。写SR2一般要1ms以内。

hpdell 发表于 2017-3-12 19:12:59

本帖最后由 hpdell 于 2017-3-12 19:32 编辑

wye11083 发表于 2017-3-12 13:17
你查一下,在没进入QSPI模式时要用标准SPI模式去读写SR2,而且切记:写SR2之后务必等待芯片写入完成!否则 ...

你好,终于找到问题所在了啊,

原来这个 stm32f7xx的单片机,里面有个 mpu 的设置,

吧读写 NAND flash 的区域取消就可以了,他奶奶的,折腾了好几天了啊

static void MPU_Set_Protection(uint32_t baseaddr,
                               uint32_t size,
                               uint32_t rnum,
                               uint32_t ap,
                               u8 sen,
                               u8 cen,
                               u8 ben)
{
        MPU_Region_InitTypeDef MPU_Initure;
       
        HAL_MPU_Disable();                                                                                    //配置MPU之前先关闭MPU,配置完成以后在使能MPU

        MPU_Initure.Enable         = MPU_REGION_ENABLE;                                //使能该保护区域
        MPU_Initure.Number         = rnum;                                            //设置保护区域
        MPU_Initure.BaseAddress      = baseaddr;                            //设置基址
        MPU_Initure.Size             = size;                                                    //设置保护区域大小
        MPU_Initure.SubRegionDisable = 0x00;                            //禁止子区域
        MPU_Initure.TypeExtField   = MPU_TEX_LEVEL0;                  //设置类型扩展域为level0
        MPU_Initure.AccessPermission = (uint8_t)ap;                                  //设置访问权限,
        MPU_Initure.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;          //允许指令访问(允许读取指令)
        MPU_Initure.IsShareable      = sen;                            //是否允许共用
        MPU_Initure.IsCacheable      = cen;                            //是否允许cache
        MPU_Initure.IsBufferable   = ben;                           //是否允许缓冲
        HAL_MPU_ConfigRegion(&MPU_Initure);                           //配置MPU
        HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);                                          //开启MPU
   
}


//下面的这个设置取消就 ,从此世界清静了,
        MPU_Set_Protection(0x80000000,
                     MPU_REGION_SIZE_2GB,   // 吧这个地方改成 256MByte 就可以了,或者取消不用也行
                     MPU_REGION_NUMBER3,
                     MPU_REGION_FULL_ACCESS,
                     MPU_ACCESS_NOT_SHAREABLE,
                     MPU_ACCESS_CACHEABLE,
                     MPU_ACCESS_BUFFERABLE);          //保护整个NAND FLASH区域,共2048M字节







SCREA 发表于 2022-7-15 15:03:18

本帖最后由 SCREA 于 2022-7-15 15:13 编辑

hpdell 发表于 2017-3-12 19:12
你好,终于找到问题所在了啊,

原来这个 stm32f7xx的单片机,里面有个 mpu 的设置,
(引用自5楼)

你这不科学啊, 有依据啊吗?手册哪里写了

hpdell 发表于 2022-7-26 08:51:53

SCREA 发表于 2022-7-15 15:03
你这不科学啊, 有依据啊吗?手册哪里写了
(引用自6楼)

是科学的,f7 的 读写nand ,对mpu 配置是有要求的
页: [1]
查看完整版本: 请教下我把 qspi的程序移植到另外的一个板子上死活都不行