/* Copyright Statement: * * This software/firmware and related documentation ("AutoChips Software") are * protected under relevant copyright laws. The information contained herein is * confidential and proprietary to AutoChips Inc. and/or its licensors. Without * the prior written permission of AutoChips inc. and/or its licensors, any * reproduction, modification, use or disclosure of AutoChips Software, and * information contained herein, in whole or in part, shall be strictly * prohibited. * * AutoChips Inc. (C) 2018. All rights reserved. * * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE") * RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER * ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, * INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS * SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE * RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE * AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE * CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE. */ /*******************************/ #ifndef W25Q64_H__ #define W25Q64_H__ #define USE_W25Q64 (1) //#define W25Q64_TEST (1) #ifdef USE_W25Q64 #ifdef __cplusplus extern "C" { #endif #include "ac780x_spi.h" #define W25Q64_BUSY_MSK (0x01) #define W25Q64_WEL_MSK (0x02) //ID #define W25Q64 0xEF16 // W25Q64 Registors #define W25Q64_WRITE_ENABLE_CMD (0X06) #define W25Q64_WRITE_DISABLE_CMD (0x04) #define W25Q64_rSTATUS_REG_CMD (0x05) #define W25Q64_wSTATUS_REG_CMD (0x01) #define W25Q64_READ_DATA_CMD (0x03) #define W25Q64_FAST_READ_DATA_CMD (0x0B) #define W25Q64_FAST_READ_DUAL_CMD 0x3B #define W25Q64_PAGE_WRITE_CMD (0x02) #define W25Q64_BLOCK_ERASE_CMD (0xD8) #define W25Q64_SECTOR_ERASE_CMD (0x20) #define W25Q64_CHIP_ERASE_CMD (0xC7) #define W25Q64_PWR_DOWN_CMD 0xB9 #define W25Q64_RELEASE_PWR_DOWN_CMD 0xAB #define W25Q64_DEVICE_ID 0xAB #define W25Q64_MANUFACT_ID 0x90 #define W25Q64_JEDEC_DEVICE_ID 0x9F //Block0 64K #define Block0_Header_Addr 0x000000 #define Block0_Tail_Addr 0x00FFFF //... Block N ... //Block127 64K #define Block127_Header_Addr 0x7F0000 #define Block127_Tail_Addr 0x7FFFFF //#define EE_CS_Low do{GPIO_SetPinLevel(LDOEn_PORT, LDOEn_PIN, GPIO_LEVEL_HIGH);}while(0) //#define EE_CS_High do{GPIO_SetPinLevel(LDOEn_PORT, LDOEn_PIN, GPIO_LEVEL_HIGH);}while(0) #define W25Q64_ADDR_MAX (0x7FFFFF) #define PAGE_SIZE (256) // 256 bytes #define SECTOR_SIZE (PAGE_SIZE*16) // 4-Kbyte #define BLOCK_SIZE (SECTOR_SIZE*16) // 64-Kbyte #define FLASH_SIZE (BLOCK_SIZE*128) // 8M字节 /******************************/ extern uint8_t g_flashWrRdRdy; extern uint16_t g_flashWrRdTime;//读取写入计时 /***************************/ void W25Q64_Init(void); /** * @prototype W25Q64_ReadBytes(uint32_t startAddr, uint8_t *pDataBuf, uint16_t dataLen) * * @param[in] startAddr: 起始地址 * @param[in] pDataBuf: 数据缓存 * @param[in] dataLen: 数据长度 * @return void * * @brief 从W25Q64读取指定长度字节数据. */ void W25Q64_ReadBytes(uint32_t startAddr, uint8_t *pDataBuf, uint16_t dataLen); /** * @prototype W25Q64_WriteBytes(uint32_t startAddr, uint8_t *pDataBuf, uint16_t dataLen) * * @param[in] startAddr: 起始地址, * @param[in] pDataBuf: 数据缓存 * @param[in] dataLen: 数据长度 * @return void * * @brief 向W25Q64写入指定长度字节数据. */ void W25Q64_WriteBytes(uint32_t startAddr, uint8_t *pDataBuf, uint16_t dataLen); /** * @prototype W25Q64_ErsSector(uint32_t startAddr, uint8_t secErNum) * * @param[in] startAddr:擦除 sector 对齐 * @param[in] secErNum:需要擦除的sec数 * @return void * * @brief 擦除W25Q64. */ void W25Q64_ErsSector(uint32_t startAddr, uint8_t secErNum); /** * @prototype W25Q64_ErsBlock(uint32_t startAddr, uint8_t blkErNum) * * @param[in] startAddr:擦除 BLOCK 对齐 * @param[in] blkErNum:需要擦除的blk数 * @return void * * @brief 擦除W25Q64 */ void W25Q64_ErsBlock(uint32_t startAddr, uint8_t blkErNum); /** * @prototype W25Q64_ErsChip(void) * * @return void * * @brief 擦除W25Q64. */ void W25Q64_ErsChip(void); //ID uint32_t W25Q64_ReadDevID(void); //检查是否读取到正确的制造商ID uint8_t W25Q64_isGood(void); #ifdef W25Q64_TEST void W25Q64_ReadDataTest(void); void W25Q64_WriteDataTest(void); #endif void W25Q64_PrintInfo(void); #ifdef __cplusplus } #endif #endif #endif //W25Q64_H__