157 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			157 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /****************************************************************************
 | ||
|  | 
 | ||
|  | Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED. | ||
|  | 
 | ||
|  | This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT | ||
|  | be copied by any method or incorporated into another program without | ||
|  | the express written consent of Aerospace C.Power. This Information or any portion | ||
|  | thereof remains the property of Aerospace C.Power. The Information contained herein | ||
|  | is believed to be accurate and Aerospace C.Power assumes no responsibility or | ||
|  | liability for its use in any way and conveys no license or title under | ||
|  | any patent or copyright and makes no representation or warranty that this | ||
|  | Information is free from patent or copyright infringement. | ||
|  | ****************************************************************************/ | ||
|  | 
 | ||
|  | #include "iot_bitops.h"
 | ||
|  | #include "os_lock.h"
 | ||
|  | #include "iot_config.h"
 | ||
|  | #include "dbg_io.h"
 | ||
|  | #include "iot_io.h"
 | ||
|  | #include "ahb.h"
 | ||
|  | #include "hw_reg_api.h"
 | ||
|  | #include "gd25lq16x.h"
 | ||
|  | #include "iot_config.h"
 | ||
|  | #include "gpio_mtx.h"
 | ||
|  | #include "nor_flash.h"
 | ||
|  | #include "iot_nor_flash_api.h"
 | ||
|  | 
 | ||
|  | #define ENABLE  1
 | ||
|  | #define DISABLE 0
 | ||
|  | 
 | ||
|  | #define RX_NUM  30
 | ||
|  | #define TX_NUM  30
 | ||
|  | 
 | ||
|  | void nor_main() { | ||
|  |     volatile uint32_t loop = 0x10000; | ||
|  |     uint32_t dev_info = 0; | ||
|  |     uint8_t memType_ID = 0; | ||
|  |     uint8_t manuf_ID = 0; | ||
|  |     uint8_t capacity_ID = 0; | ||
|  |     uint8_t reg_stats_l = 0; | ||
|  |     uint8_t reg_stats_h = 0; | ||
|  |     uint8_t check_cnt = 0; | ||
|  | 
 | ||
|  |     uint8_t i = 0; | ||
|  |     char TxBuf[TX_NUM] = {  0x13,0x48,0x48,0x48,0x28,0x68,0x70, | ||
|  |                             0x88,0x90,0xA8,0xB3,0xC1,0xDD,0xE8,0xF0, | ||
|  |                             0x11,0x47,0x47,0x47,0x47,0x66,0x77, | ||
|  |                             0x88,0x99,0x8A,0xBB,0x81,0xDD,0xEE,0xF9}; | ||
|  |     char RxBuf[RX_NUM]; | ||
|  | 
 | ||
|  |     dbg_uart_init(); | ||
|  |     iot_printf("nand flash test start..........\r\n"); | ||
|  | 
 | ||
|  |     iot_norfc_cfg_t cfg = {0}; | ||
|  |     cfg.spi.gpio.clk = 37; | ||
|  |     cfg.spi.gpio.cs = 28; | ||
|  |     cfg.spi.gpio.miso = 40; | ||
|  |     cfg.spi.gpio.mosi = 39; | ||
|  |     cfg.spi.port = 0; | ||
|  |     iot_norfc_init(&cfg); | ||
|  | 
 | ||
|  |     do { | ||
|  |         dev_info = iot_norfc_read_chip_info(); | ||
|  |         memType_ID = (uint8_t)( (dev_info>>8) & 0xFF); | ||
|  |         capacity_ID = (uint8_t)((dev_info>>16) & 0xFF); | ||
|  |         manuf_ID = (uint8_t)dev_info; | ||
|  |         iot_printf("Memery type ID: %x\r\n", memType_ID); | ||
|  |         iot_printf("Manufact ID: %x\r\n", manuf_ID); | ||
|  |         iot_printf("Capacity ID: %x\r\n", capacity_ID); | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  | 
 | ||
|  |         reg_stats_l = norfc_get_status_reg(READ_STS_REG_L_CMD); | ||
|  |         iot_printf("Low Status Reg: %x\r\n", reg_stats_l); | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  | 
 | ||
|  |         loop = 0x10000; | ||
|  |         while(loop--); | ||
|  | 
 | ||
|  |         reg_stats_h = norfc_get_status_reg(READ_STS_REG_H_CMD); | ||
|  |         iot_printf("High Status Reg: %x\r\n", reg_stats_l); | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  |         if( reg_stats_h & 0x40 ) | ||
|  |         { | ||
|  |             /*set BP2,BP1,BP0*/ | ||
|  |             reg_stats_l |= 0x1C; | ||
|  |         } | ||
|  |         else | ||
|  |         { | ||
|  |             /*clear BP2,BP1,BP0*/ | ||
|  |             reg_stats_l &= 0xE3; | ||
|  |         } | ||
|  |         norfc_set_status_reg(®_stats_l, 1); | ||
|  | 
 | ||
|  |         loop = 0x10000; | ||
|  |         while(loop--); | ||
|  | 
 | ||
|  |         reg_stats_l = norfc_get_status_reg(READ_STS_REG_L_CMD); | ||
|  |         iot_printf("Lower status reg set: %x\r\n", reg_stats_l); | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  | 
 | ||
|  |         if(!iot_norfc_erase_data(BLOCK_ERASE_32K_CMD,50)) | ||
|  |         { | ||
|  |             iot_printf("Erase block done! \r\n"); | ||
|  |             iot_printf("******************************\r\n"); | ||
|  |             iot_printf("\r\n"); | ||
|  |         } | ||
|  | 
 | ||
|  |         if(!iot_norfc_program_page(TxBuf, 50, TX_NUM)) | ||
|  |         { | ||
|  |             iot_printf("Program random data done! \r\n"); | ||
|  |             iot_printf("******************************\r\n"); | ||
|  |             iot_printf("\r\n"); | ||
|  |         } | ||
|  | 
 | ||
|  |         iot_norfc_read_data(RxBuf, 50, RX_NUM); | ||
|  | 
 | ||
|  |         for(i = 0; i<RX_NUM; i++) | ||
|  |         { | ||
|  |             iot_printf("Received data1: %x\r\n", RxBuf[i]); | ||
|  |             if(RxBuf[i] != TxBuf[i]) | ||
|  |             { | ||
|  |                 iot_printf("Something wrong when programming or reading!!!!\r\n"); | ||
|  |                 iot_printf("\r\n"); | ||
|  |                 check_cnt++; | ||
|  |             } | ||
|  |         } | ||
|  |         if (check_cnt == 0) | ||
|  |         { | ||
|  |             iot_printf("\r\n"); | ||
|  |             iot_printf("nand flash test done..........\r\n"); | ||
|  | 
 | ||
|  |         } | ||
|  |         check_cnt = 0; | ||
|  |         iot_printf("\r\n"); | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  | 
 | ||
|  |         loop = 0x2000000; | ||
|  |         while(loop--); | ||
|  |     } while (true); | ||
|  | 
 | ||
|  |     return; | ||
|  | } | ||
|  | 
 | ||
|  | #ifdef __GNUC__
 | ||
|  | 
 | ||
|  | int main(void) { | ||
|  |     nor_main(); | ||
|  |     return 0; | ||
|  | } | ||
|  | #endif // __GCC__
 | ||
|  | 
 |