123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- /* 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.
- */
- /*************<start>******************/
- #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>*****************/
- extern uint8_t g_flashWrRdRdy;
- extern uint16_t g_flashWrRdTime;//读取写入计时
- /*************<prototype>**************/
- 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__
|