
本帖最后由 hpdell 于 2015-12-12 21:24 编辑 nor flash 芯片使用 :S29GL256P 32 MByte 各位大神们好,请教下关于这个 HAL_StatusTypeDef HAL_NOR_ProgramBuffer(NOR_HandleTypeDef *hnor, uint32_t uwAddress, uint16_t *pData, uint32_t uwBufferSize) 函数写入的地址, uint32_t uwAddress 加入基地址后,程序会发生硬件错误, 示例如下: #define NOR_FLASH_BASE_ADDR ((u32)(0x64000000)) #define NOR_SECTOR_SIZE ((u32)(2014*128UL)) // nor flash 的扇区大小,128KByte { /* Return to read mode */ // HAL_NOR_ReturnToReadMode(&hnor2); status = HAL_NOR_Erase_Block(&hnor2, (uint32_t )((NOR_SECTOR_SIZE * 2) ), NOR_FLASH_BASE_ADDR); // 2 扇区号,擦出后,读出的数据全部为 0xffff,说明擦除是正确的 Delay_Ms(500); /* Return the NOR memory status */ if(HAL_NOR_GetStatus(&hnor2, NOR_FLASH_BASE_ADDR, NOR_TIMEOUT_VALUE) != HAL_NOR_STATUS_SUCCESS) { /* Erase Error */ printf("\r\nHAL_NOR_Erase_Block Error 1 ..." ); } Fill_Buffer(aTxBuffer, BUFFER_SIZE, 0xC20F); // 给aTxBuffer 赋值,数据从 0xc20f 开始 HAL_NOR_ProgramBuffer(&hnor2, (uint32_t )((NOR_SECTOR_SIZE * 2) + NOR_FLASH_BASE_ADDR), aTxBuffer, 64); // 写入地址如果加上基地址,程序会发生硬件错误,如果不加上基地址,不会发生硬件错误 HAL_NOR_ReadBuffer(&hnor2, NOR_FLASH_BASE_ADDR+(NOR_SECTOR_SIZE * 2), (uint16_t *)aRxBuffer, 64); // 读出与写入的数据不一致 } 使用读出nor flash id函数可以正确读出 芯片的 id 号 使用下面的这个函数完全没有问题 HAL_NOR_Program(&hnor2, (uint32_t *)startaddress ++ , pdata); 每写一个数据后,地址加1 |
感谢感谢哦
哈哈哈,好