66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | 
 | ||
|  | #include "os_types.h"
 | ||
|  | #include "dbg_io.h"
 | ||
|  | #include "efuse.h"
 | ||
|  | #define BIT(b) (1<<(b))
 | ||
|  | 
 | ||
|  | #define EF_SFC_CLK 6
 | ||
|  | #define EF_SFC_CS 43
 | ||
|  | #define EF_SFC_D0 5
 | ||
|  | #define EF_SFC_D1 16
 | ||
|  | #define EF_SFC_D2 17
 | ||
|  | #define EF_SFC_D3 7
 | ||
|  | 
 | ||
|  | void efuse_test_write() | ||
|  | { | ||
|  |         int value; | ||
|  | 
 | ||
|  | #define download_enable (1)
 | ||
|  | #define security_mode     (0)
 | ||
|  | #define boot_mode     (0)
 | ||
|  | 
 | ||
|  |     /* SFC   HASH_IV */ | ||
|  |     efuse_write(0, BIT(19)|BIT(23)); /* SFC VALID */ | ||
|  |     value = (EF_SFC_D0<<24)|(EF_SFC_CS<<16)|(EF_SFC_CLK<<8); | ||
|  |     efuse_write(4, value); /* D0,CS,CLK,  MAC */ | ||
|  |     value = (0x03<<24)|(EF_SFC_D3<<16)|(EF_SFC_D2<<8)|EF_SFC_D1; | ||
|  |     efuse_write(8, value); /* CMD,D3,D2,D1 */ | ||
|  |     efuse_write(64, 0x01234567); /* HASH */ | ||
|  |     efuse_write(68, 0x89ABCDEF); /* HASH */ | ||
|  |     efuse_write(72, 0x01234567); /* HASH */ | ||
|  |     efuse_write(76, 0x89ABCDEF); /* HASH */ | ||
|  | 
 | ||
|  |     efuse_write(24, 0x19966); /* reset cmd & valid */ | ||
|  |     efuse_write(28, 0x8000000); /* valid */ | ||
|  | 
 | ||
|  |     value = BIT(17)|BIT(25); /* e_config.u_config.cfg_valid */ | ||
|  |     efuse_write(32, value); | ||
|  |     value = 0; | ||
|  |     if(!security_mode) | ||
|  |         value |= BIT(7)|BIT(23); /* e_config.u_config.security_mode */ | ||
|  |     if(!boot_mode) | ||
|  |         value |= BIT(8)|BIT(24); /* e_config.u_config.boot_mode */ | ||
|  |     if(download_enable) | ||
|  |         value |= BIT(10)|BIT(26); /* e_config.u_config.download_enable */ | ||
|  |     efuse_write(36, value); | ||
|  | 
 | ||
|  |     return ; | ||
|  | } | ||
|  | 
 | ||
|  | int main(void) | ||
|  | { | ||
|  |     dbg_uart_init(); | ||
|  |     #if 0
 | ||
|  |     efuse_write(0, 0xa5a5a5a5); | ||
|  |     efuse_write(1, 0x5a5a5a5a); | ||
|  |     efuse_write(2, 0x5a5aa5a5); | ||
|  |     efuse_write(3, 0x12345678); | ||
|  |     efuse_write(63, 0x87654321); | ||
|  |     #endif
 | ||
|  |     efuse_test_write(); | ||
|  |      | ||
|  |     while(1); | ||
|  | 
 | ||
|  |     return 0; | ||
|  | } |