162 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			162 lines
		
	
	
		
			4.6 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 "chip_reg_base.h"
 | ||
|  | #include "hw_reg_api.h"
 | ||
|  | #include "iot_bitops.h"
 | ||
|  | #include "os_lock.h"
 | ||
|  | #include "iot_config.h"
 | ||
|  | #include "ahb_rf.h"
 | ||
|  | #include "os_mem.h"
 | ||
|  | 
 | ||
|  | #include "dbg_io.h"
 | ||
|  | #include "iot_io.h"
 | ||
|  | 
 | ||
|  | #include "hw_reg_api.h"
 | ||
|  | #include "ds35x1gaxxx.h"
 | ||
|  | #include "iot_config.h"
 | ||
|  | #include "gpio_mtx.h"
 | ||
|  | #include "nand_flash.h"
 | ||
|  | #include "iot_nand_flash_api.h"
 | ||
|  | 
 | ||
|  | #define RX_NUM  20
 | ||
|  | #define TX_NUM  30
 | ||
|  | 
 | ||
|  | void nand_main() { | ||
|  |     volatile uint32_t loop = 0x10000; | ||
|  |     uint8_t dev_ID = 0; | ||
|  |     uint8_t manuf_ID = 0; | ||
|  |     uint8_t reg_stats = 0; | ||
|  |     uint8_t i = 0; | ||
|  |     uint8_t check_cnt = 0; | ||
|  |     char TxBuf[TX_NUM] = {0x39,0x08,0x08,0x44,0x55,0x07,0x57, | ||
|  |                           0x88,0x08,0x39,0x39,0x39,0xdd,0xee,0xff, | ||
|  |                           0x15,0x20,0x88,0x11,0x39,0x60,0x70, | ||
|  |                           0x88,0x90,0xa0,0xb0,0xc0,0xd0,0xe0,0xf0}; | ||
|  |     char RxBuf[RX_NUM]; | ||
|  | 
 | ||
|  |     dbg_uart_init(); | ||
|  |     iot_printf("nand flash test start..........\r\n"); | ||
|  | 
 | ||
|  |     iot_nandfc_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_nandfc_init(&cfg); | ||
|  | 
 | ||
|  |     os_mem_set(RxBuf, 0,RX_NUM); | ||
|  | 
 | ||
|  |     do { | ||
|  |         iot_nandfc_reset_device(); | ||
|  | 
 | ||
|  |         loop = 0x1000; | ||
|  |         while(loop--); | ||
|  | 
 | ||
|  |         dev_ID = iot_nandfc_read_chip_ID(); | ||
|  |         manuf_ID = iot_nandfc_read_manufactury_ID(); | ||
|  | 
 | ||
|  |         iot_printf("Device ID: %x\r\n", dev_ID); | ||
|  |         iot_printf("Manuf ID: %x\r\n", manuf_ID); | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  | 
 | ||
|  |         reg_stats = nandfc_get_feature(STATUS_ADDR); | ||
|  |         iot_printf("status reg: %x\r\n", reg_stats); | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  | 
 | ||
|  |         reg_stats = nandfc_set_feature(BLOCK_LOCK_ADDR,0x00); | ||
|  |         iot_printf("BL reg set: %x\r\n", reg_stats); | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  | 
 | ||
|  |         reg_stats = nandfc_get_feature(BLOCK_LOCK_ADDR); | ||
|  |         iot_printf("BL reg get: %x\r\n", reg_stats); | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  | 
 | ||
|  |         nandfc_write_en_switch(ENABLE); | ||
|  |         loop = 0x1000; | ||
|  |         while(loop--); | ||
|  | 
 | ||
|  |         reg_stats = nandfc_get_feature(STATUS_ADDR); | ||
|  |         iot_printf("status reg: %x\r\n", reg_stats); | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  | 
 | ||
|  |         if(!iot_nandfc_program_data_with_erase(TxBuf, 2045+(11<<12), TX_NUM)) | ||
|  |         { | ||
|  |             iot_printf("Program data done! \r\n"); | ||
|  |             iot_printf("******************************\r\n"); | ||
|  |             iot_printf("\r\n"); | ||
|  |         } | ||
|  |         else | ||
|  |         { | ||
|  |             iot_printf("Program data Failed!!!! \r\n"); | ||
|  |             iot_printf("******************************\r\n"); | ||
|  |             iot_printf("\r\n"); | ||
|  |         } | ||
|  | 
 | ||
|  |         iot_nandfc_read_data(RxBuf, 2045+(11<<12), RX_NUM); | ||
|  | 
 | ||
|  |         for(i = 0; i<RX_NUM; i++) | ||
|  |         { | ||
|  |             iot_printf("Received data1[%d]: %x\r\n",i, RxBuf[i]); | ||
|  |         } | ||
|  |         iot_printf("******************************\r\n"); | ||
|  |         iot_printf("\r\n"); | ||
|  | 
 | ||
|  |         for(i = 0; i<RX_NUM; i++) | ||
|  |         { | ||
|  |             if(RxBuf[i] != TxBuf[i]) | ||
|  |             { | ||
|  |                 iot_printf("Somthing wrong in programing or reading progress!!: RxBuf[%d] != TxBuf[%d]\r\n",i, i); | ||
|  |             } | ||
|  |             else | ||
|  |             { | ||
|  |                 check_cnt++; | ||
|  |             } | ||
|  |         } | ||
|  |         if(RX_NUM==check_cnt) | ||
|  |         { | ||
|  |             iot_printf("NAND flash test done!!!"); | ||
|  |         } | ||
|  |         else | ||
|  |         { | ||
|  |             iot_printf("NAND flash test Failed!!!"); | ||
|  |         } | ||
|  |         check_cnt = 0; | ||
|  |         iot_printf("******************************\r\n"); | ||
|  | 
 | ||
|  |         loop = 0x2000000; | ||
|  |         while(loop--); | ||
|  |     } while (true); | ||
|  | 
 | ||
|  |     return; | ||
|  | } | ||
|  | 
 | ||
|  | #ifdef __GNUC__
 | ||
|  | 
 | ||
|  | int main(void) { | ||
|  |     nand_main(); | ||
|  |     return 0; | ||
|  | } | ||
|  | #endif // __GCC__
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 |