BLE5.2 1.0
开发文档说明
xc_drv_fmc_spi.h
浏览该文件的文档.
1
25/* Define to prevent recursive inclusion -------------------------------------*/
26#ifndef __XC_DRV_FMC_SPI_H_
27#define __XC_DRV_FMC_SPI_H_
28
29/*-----------------------------------------------------------------------------------
30 INCLUDE HEADE FILES
31 ------------------------------------------------------------------------------------*/
32
33#include "xc6xxx.h"
34
35/*------------------------------------------------------------------------------------
36 Macros
37 -------------------------------------------------------------------------------------*/
38#define __RAM_CODE __attribute__((section("ram_code")))
39
40#define __WRITE_REG32(REG, VAL) ((*REG) = (VAL))
41#define __READ_REG32(REG, VAL) ((VAL) = (*REG))
42#define __SET_BIT(REG, BIT) ((REG) |= (BIT))
43#define __CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
44
45#define FMC_SSI_CTRL0_DFS_LEN_4BIT (0x03UL)
46#define FMC_SSI_CTRL0_DFS_LEN_5BIT (0x04UL)
47#define FMC_SSI_CTRL0_DFS_LEN_6BIT (0x05UL)
48#define FMC_SSI_CTRL0_DFS_LEN_7BIT (0x06UL)
49#define FMC_SSI_CTRL0_DFS_LEN_8BIT (0x07UL)
50#define FMC_SSI_CTRL0_DFS_LEN_9BIT (0x08UL)
51#define FMC_SSI_CTRL0_DFS_LEN_10BIT (0x09UL)
52#define FMC_SSI_CTRL0_DFS_LEN_11BIT (0x0aUL)
53#define FMC_SSI_CTRL0_DFS_LEN_12BIT (0x0bUL)
54#define FMC_SSI_CTRL0_DFS_LEN_13BIT (0x0cUL)
55#define FMC_SSI_CTRL0_DFS_LEN_14BIT (0x0dUL)
56#define FMC_SSI_CTRL0_DFS_LEN_15BIT (0x0eUL)
57#define FMC_SSI_CTRL0_DFS_LEN_16BIT (0x0fUL)
58
59#define FMC_SSI_CTRL0_DFS_LEN_17BIT (0x10UL)
60#define FMC_SSI_CTRL0_DFS_LEN_18BIT (0x11UL)
61#define FMC_SSI_CTRL0_DFS_LEN_19BIT (0x12UL)
62#define FMC_SSI_CTRL0_DFS_LEN_20BIT (0x13UL)
63#define FMC_SSI_CTRL0_DFS_LEN_21BIT (0x14UL)
64#define FMC_SSI_CTRL0_DFS_LEN_22BIT (0x15UL)
65#define FMC_SSI_CTRL0_DFS_LEN_23BIT (0x16UL)
66#define FMC_SSI_CTRL0_DFS_LEN_24BIT (0x17UL)
67#define FMC_SSI_CTRL0_DFS_LEN_25BIT (0x18UL)
68#define FMC_SSI_CTRL0_DFS_LEN_26BIT (0x19UL)
69#define FMC_SSI_CTRL0_DFS_LEN_27BIT (0x1AUL)
70#define FMC_SSI_CTRL0_DFS_LEN_28BIT (0x1BUL)
71#define FMC_SSI_CTRL0_DFS_LEN_29BIT (0x1CUL)
72#define FMC_SSI_CTRL0_DFS_LEN_30BIT (0x1DUL)
73#define FMC_SSI_CTRL0_DFS_LEN_31BIT (0x1EUL)
74#define FMC_SSI_CTRL0_DFS_LEN_32BIT (0x1FUL)
75
76#define FMC_SSI_CTRL0_FRF_MOTOROLA (0x0UL)
77#define FMC_SSI_CTRL0_FRF_TI (0x1UL)
78
79#define FMC_SSI_CTRL0_SCPHA_LEAD (0x0UL)
80#define FMC_SSI_CTRL0_SCPHA_TRAIL (0x1UL)
81
82#define FMC_SSI_CTRL0_SCPOL_HIGH (0x1UL)
83#define FMC_SSI_CTRL0_SCPOL_LOW (0x0UL)
84
85#define FMC_SSI_CTRL0_TMOD_WR (0x0UL)
86#define FMC_SSI_CTRL0_TMOD_W (0x1UL)
87#define FMC_SSI_CTRL0_TMOD_R (0x2UL)
88
89#define FMC_SSI_CTRL0_SLV_OE_ENABLE (0x0UL)
90#define FMC_SSI_CTRL0_SLV_OE_DISABLE (0x1UL)
91
92#define FMC_SSI_CTRL0_SRL_NORMAL (0x0UL)
93#define FMC_SSI_CTRL0_SRL_LOOKBACK (0x1UL)
94
95#define FMC_SSI_CTRL0_SSTE_ENABLE (0x1UL)
96#define FMC_SSI_CTRL0_SSTE_DISABLE (0x0UL)
97
98#define FMC_SSI_CTRL0_CFS_SIZE_Bit_01 (0x0UL)
99#define FMC_SSI_CTRL0_CFS_SIZE_Bit_02 (0x1UL)
100#define FMC_SSI_CTRL0_CFS_SIZE_Bit_03 (0x2UL)
101#define FMC_SSI_CTRL0_CFS_SIZE_Bit_04 (0x3UL)
102#define FMC_SSI_CTRL0_CFS_SIZE_Bit_05 (0x4UL)
103#define FMC_SSI_CTRL0_CFS_SIZE_Bit_06 (0x5UL)
104#define FMC_SSI_CTRL0_CFS_SIZE_Bit_07 (0x6UL)
105#define FMC_SSI_CTRL0_CFS_SIZE_Bit_08 (0x7UL)
106#define FMC_SSI_CTRL0_CFS_SIZE_Bit_09 (0x8UL)
107
108#define FMC_SSI_CTRL0_SPI_FRF_STANDARD (0x0UL)
109
110#define FMC_SSI_CTRL0_SPI_FRF_DUAL (0x1UL)
111#define FMC_SSI_CTRL0_SPI_FRF_QUAD (0x2UL)
112#define FMC_SSI_CTRL0_SPI_FRF_OCTAL (0x3UL)
113
114#define FMC_SSI_EN_SEN_ENABLE (0x1UL)
115#define FMC_SSI_EN_SEN_DISABLE (0x0UL)
116
117#define FMC_SSI_SE_SS0_SELECT_YES (0x1UL)
118#define FMC_SSI_SE_SS0_SELECT_NO (0x0UL)
119
120#define FMC_SSI_BAUD_DIV_2 (0x02UL)
121#define FMC_SSI_BAUD_DIV_4 (0x04UL)
122#define FMC_SSI_BAUD_DIV_6 (0x06UL)
123#define FMC_SSI_BAUD_DIV_8 (0x08UL)
124#define FMC_SSI_BAUD_DIV_10 (0x10UL)
125#define FMC_SSI_BAUD_DIV_12 (0x12UL)
126
127#define FMC_SSI_TXFTL_FIFO_0 (0x00UL)
128#define FMC_SSI_TXFTL_FIFO_1 (0x01UL)
129#define FMC_SSI_TXFTL_FIFO_2 (0x02UL)
130#define FMC_SSI_TXFTL_FIFO_3 (0x03UL)
131#define FMC_SSI_TXFTL_FIFO_4 (0x04UL)
132#define FMC_SSI_TXFTL_FIFO_5 (0x05UL)
133#define FMC_SSI_TXFTL_FIFO_6 (0x06UL)
134#define FMC_SSI_TXFTL_FIFO_7 (0x07UL)
135
136#define FMC_SSI_RXFTL_FIFO_0 (0x00UL)
137#define FMC_SSI_RXFTL_FIFO_1 (0x01UL)
138#define FMC_SSI_RXFTL_FIFO_2 (0x02UL)
139#define FMC_SSI_RXFTL_FIFO_3 (0x03UL)
140#define FMC_SSI_RXFTL_FIFO_4 (0x04UL)
141#define FMC_SSI_RXFTL_FIFO_5 (0x05UL)
142#define FMC_SSI_RXFTL_FIFO_6 (0x06UL)
143#define FMC_SSI_RXFTL_FIFO_7 (0x07UL)
144
145#define FMC_SSI_STS_BUSY_SET (0x1UL << BUSY_POS)
146#define FMC_SSI_STS_BUSY_RESET (0x0UL << BUSY_POS)
147
148#define FMC_SSI_STS_TFNF_SET (0x1UL << TFNF_POS)
149#define FMC_SSI_STS_TFNF_RESET (0x0UL << TFNF_POS)
150
151#define FMC_SSI_STS_TFE_SET (0x1UL << TFE_POS)
152#define FMC_SSI_STS_TFE_RESET (0x0UL << TFE_POS)
153
154#define FMC_SSI_STS_RFNE_SET (0x1UL << RFNE_POS)
155#define FMC_SSI_STS_RFNE_RESET (0x0UL << RFNE_POS)
156
157#define FMC_SSI_STS_RFF_SET (0x1UL << RFF_POS)
158#define FMC_SSI_STS_RFF_RESET (0x0UL << RFF_POS)
159
160#define FMC_SSI_STS_TXE_SET (0x1UL << TXE_POS)
161#define FMC_SSI_STS_TXE_RESET (0x0UL << TXE_POS)
162
163#define FMC_SSI_IE_TXEIE_ENABLE (0x1UL << TXEIE_POS)
164#define FMC_SSI_IE_TXEIE_DISABLE (0x0UL << TXEIE_POS)
165
166#define FMC_SSI_IE_TXOIE_ENABLE (0x1UL << TXOIE_POS)
167#define FMC_SSI_IE_TXOIE_DISABLE (0x0UL << TXOIE_POS)
168
169#define FMC_SSI_IE_RXUIE_ENABLE (0x1UL << RXUIE_POS)
170#define FMC_SSI_IE_RXUIE_DISABLE (0x0UL << RXUIE_POS)
171
172#define FMC_SSI_IE_RXOIE_ENABLE (0x1UL << RXOIE_POS)
173#define FMC_SSI_IE_RXOIE_DISABLE (0x0UL << RXOIE_POS)
174
175#define FMC_SSI_IE_RXFIE_ENABLE (0x1UL << RXFIE_POS)
176#define FMC_SSI_IE_RXFIE_DISABLE (0x0UL << RXFIE_POS)
177
178#define FMC_SSI_IS_TXEIS_SET (0x1UL << TXEIS_POS)
179#define FMC_SSI_IS_TXEIS_RESET (0x0UL << TXEIS_POS)
180
181#define FMC_SSI_IS_TXOIS_SET (0x1UL << TXOIS_POS)
182#define FMC_SSI_IS_TXOIS_RESET (0x0UL << TXOIS_POS)
183
184#define FMC_SSI_IS_RXUIS_SET (0x1UL << RXUIS_POS)
185#define FMC_SSI_IS_RXUIS_RESET (0x0UL << RXUIS_POS)
186
187#define FMC_SSI_IS_RXOIS_SET (0x1UL << RXOIS_POS)
188#define FMC_SSI_IS_RXOIS_RESET (0x0UL << RXOIS_POS)
189
190#define FMC_SSI_SSI_IS_RXFIS_SET (0x1UL << RXFIS_POS)
191#define FMC_SSI_SSI_IS_RXFIS_RESET (0x0UL << RXFIS_POS)
192
193#define FMC_SSI_RIS_TXEIR_SET (0x1UL << TXEIR_POS)
194#define FMC_SSI_RIS_TXEIR_RESET (0x0UL << TXEIR_POS)
195
196#define FMC_SSI_RIS_TXOIR_SET (0x1UL << TXOIR_POS)
197#define FMC_SSI_RIS_TXOIR_RESET (0x0UL << TXOIR_POS)
198
199#define FMC_SSI_RIS_RXUIR_SET (0x1UL << RXUIR_POS)
200#define FMC_SSI_RIS_RXUIR_RESET (0x0UL << RXUIR_POS)
201
202#define FMC_SSI_RIS_RXOIR_SET (0x1UL << RXOIR_POS)
203#define FMC_SSI_RIS_RXOIR_RESET (0x0UL << RXOIR_POS)
204
205#define FMC_SSI_RIS_RXFIR_SET (0x1UL << RXFIR_POS)
206#define FMC_SSI_RIS_RXFIR_RESET (0x0UL << RXFIR_POS)
207
208#define PUYA_FLASH_STATUS_WIP_SET (0x01UL)
209#define PUYA_FLASH_STATUS_WIP_RESET (0x00UL)
210
211#define CMD_READ_DATA (uint8_t)0x03
212#define CMD_READ_STATUS (uint8_t)0x05
213#define CMD_CHIP_ERASE (uint8_t)0xc7
214#define CMD_WRITE_ENABLE (uint8_t)0x06
215#define CMD_WRITE_DISABLE (uint8_t)0x04
216#define CMD_PAGE_PROGRAM (uint8_t)0x02
217#define CMD_BLOCK_ERASE (uint8_t)0xD8
218#define CMD_SECTOR_ERASE (uint8_t)0x20
219#define CMD_PAGE_ERASE (uint8_t)0x81
220#define CMD_RELEASE_PWRDWN (uint8_t)0xAB
221#define CMD_PWRDWN (uint8_t)0xB9
222#define CMD_RUID (uint8_t)0x4B
223#define CMD_RDID (uint8_t)0x9F
224#define CMD_QREMS (uint8_t)0x94
225#define CMD_WRITE_STATUS_REG (uint8_t)0x01
226
227#define FLASH_PAGE_SIZE 256
228#define FLASH_SECTOR_SIZE 4096
229
230#define CUR_PAGE_NUM(addr) (addr / FLASH_PAGE_SIZE)
231#define CUR_START_PSR(addr) (addr % FLASH_PAGE_SIZE)
232#define CUR_SECTOR_NUM(addr) (addr / FLASH_SECTOR_SIZE)
233#define CUR_SECTOR_PSR(addr) (addr % FLASH_SECTOR_SIZE)
234
235#define BLE_COMMON_BASE 0x53022000UL
236#define BLE_COMN_AGC_REG_OUT0 ((volatile uint32_t *)(BLE_COMMON_BASE + 0x28))
237#define FMC_IDLE_STATUS ((uint32_t)0x01 << 31)
238
239
240#define CMD_ERASE_SECURITY_REG (uint8_t)0x44
241#define CMD_READ_SECURITY_REG (uint8_t)0x48
242#define CMD_PROGRAM_SECURITY_REG (uint8_t)0x42
243
244#define OTP_PROGRAM_PAGE_0 (uint8_t)0x0
245#define OTP_PROGRAM_PAGE_1 (uint8_t)0x10
246#define OTP_PROGRAM_PAGE_2 (uint8_t)0x20
247#define OTP_PROGRAM_PAGE_3 (uint8_t)0x30
248
249#define FLASH_2M_FLAG 0x15
250#define FLASH_1M_FLAG 0x14
251#define FLASH_512K_FLAG 0x13
252#define FLASH_256K_FLAG 0x12
253#define FLASH_128K_FLAG 0x11
254
255#define FLASH_2M_SIZE 1024*2048
256#define FLASH_1M_SIZE 1024*1024
257#define FLASH_512K_SIZE 1024*512
258#define FLASH_256K_SIZE 1024*256
259#define FLASH_128K_SIZE 1024*128
260
261#define YOUCUN_FLASH 0x60B3
262#define PURAN_128K_FLASH 0x4485
263#define GD25WD40_512K_FLASH 0x64C8
264
265#define FLASH_PAGE_SIZE 256
266#define FLASH_SECTOR_SIZE 4096
267
268typedef struct board_c
269{
270 uint32_t adc2v4_cail;
272 uint32_t flash_id;
274 uint32_t ft_rest;
276 uint32_t chip_cnt;
278 uint32_t rc_cail;
281
282/*------------------------------------------------------------------------------------
283 Inline Functions
284 -------------------------------------------------------------------------------------*/
285
286/*------------------------------------------------------------------------------------
287 Exported Functions
288 -------------------------------------------------------------------------------------*/
289void xc_fmc_spi_init_oprt(void);
291void xc_fmc_spi_flash_wake_up(void);
294void xc_fmc_spi_flash_erase_sector(uint32_t addr);
295void xc_fmc_spi_flash_erase_page(uint32_t addr);
296void xc_fmc_spi_flash_write_page(uint32_t addr, uint8_t *buff,
297 uint16_t size);
298void xc_fmc_spi_flash_read_page(uint32_t addr, uint8_t *buff,
299 uint16_t size);
300void xc_fmc_spi_otp_read_page(uint32_t addr, uint8_t *data,
301 uint16_t size);
302uint8_t xc_fmc_spi_flash_write(uint32_t addr, uint8_t *buff,
303 uint16_t len);
304uint8_t xc_fmc_spi_flash_read(uint32_t addr, uint8_t *buff,
305 uint16_t len);
306void xc_fmc_spi_flash_ruid(uint8_t *ruid);
307void xc_fmc_spi_flash_rdid(uint8_t *rdid);
308bool flash_size_and_type_get(uint32_t *flash_size, uint16_t *flash_type);
309bool xc_adc_2v4_calibrate_read(uint16_t * adc_calibrate);
310bool xc_unique_identification_read(uint8_t *unique_id);
311
312#endif /* __XC6xxx_FMC_SPI_H_ */
uint32_t rc_cail
uint32_t flash_id
uint32_t chip_cnt_reverse_verif
uint32_t adc2v4_reverse_verif
uint32_t ft_rest_reverse_verif
uint32_t chip_cnt
uint32_t flash_id_reverse_verif
uint32_t adc2v4_cail
uint32_t rc_cail_reverse_verif
uint32_t ft_rest
bool xc_adc_2v4_calibrate_read(uint16_t *adc_calibrate)
xc_adc_2v4_calibrate_read
void xc_fmc_spi_flash_ruid(uint8_t *ruid)
xc_fmc_spi_flash_ruid
void xc_fmc_spi_flash_erase_sector(uint32_t addr)
xc_fmc_spi_flash_erase_sector
struct board_c board_card_t
uint8_t xc_fmc_spi_flash_read(uint32_t addr, uint8_t *buff, uint16_t len)
xc_fmc_spi_flash_write
void xc_fmc_spi_otp_read_page(uint32_t addr, uint8_t *data, uint16_t size)
xc_fmc_spi_flash_read_page
bool flash_size_and_type_get(uint32_t *flash_size, uint16_t *flash_type)
flash_size_and_type_get
bool xc_unique_identification_read(uint8_t *unique_id)
xc_unique_identification_read
void xc_fmc_spi_flash_erase_page(uint32_t addr)
xc_fmc_spi_flash_erase_page
void xc_fmc_spi_flash_wait_busy(void)
void xc_fmc_spi_flash_wake_up(void)
xc_fmc_spi_flash_power_down
void xc_fmc_spi_flash_read_page(uint32_t addr, uint8_t *buff, uint16_t size)
xc_fmc_spi_flash_read_page
void xc_fmc_spi_flash_write_page(uint32_t addr, uint8_t *buff, uint16_t size)
xc_fmc_spi_flash_write_page
void xc_fmc_spi_flash_write_enable(void)
void xc_fmc_spi_flash_power_down(void)
xc_fmc_spi_flash_power_down
void xc_fmc_spi_flash_rdid(uint8_t *rdid)
xc_fmc_spi_flash_rdid
void xc_fmc_spi_init_oprt(void)
xc_fmc_spi_init_oprt
uint8_t xc_fmc_spi_flash_write(uint32_t addr, uint8_t *buff, uint16_t len)