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

2019-12-30 19:23发布

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


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

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

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

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

现在也找不出问题出在哪里了,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
hpdell
2019-12-31 02:16
本帖最后由 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字节







一周热门 更多>