CH579-Flash

  1 /********************************** (C) COPYRIGHT *******************************
  2 * File Name          : Main.c
  3 * Author             : WCH
  4 * Version            : V1.0
  5 * Date               : 2018/12/15
  6 * Description          : 片上flash演示:包括Code区,DataFlash区的擦/读/写
  7 *******************************************************************************/
  8 
  9 #include "CH57x_common.h"
 10 
 11 #define  TEST_CODESIZE          100
 12 #define  TEST_CODEADDR          0x00006000
 13 #define  TEST_DATAFLASHSIZE     4
 14 #define  TEST_DATAFLASHADDR     0x0400
 15 
 16 UINT32   TestBuf[ TEST_CODESIZE ];
 17 
 18 void DebugInit(void)        
 19 {
 20     GPIOA_SetBits(GPIO_Pin_9);
 21     GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
 22     GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
 23     UART1_DefInit();
 24 }
 25 
 26 /*******************************************************************************
 27 * Function Name  : CodeFlash_BlockErase
 28 * Description    : CodeFlash 块擦除,一次擦除512B
 29 * Input          : addr: 32位地址,需要512对齐                           
 30 * Return         : FAILED  - 错误
 31                    SUCCESS - 成功
 32 *******************************************************************************/
 33 UINT8 CodeFlash_BlockErase(UINT32 addr)
 34 {
 35     UINT8  status = 0;
 36 
 37     EnableCodeFlash();
 38     status = Flash_BlockErase( addr );
 39     LockFlashALL();
 40 
 41     return ( status );
 42 }
 43 
 44 
 45 /*******************************************************************************
 46 * Function Name  : CodeFlash_WriteDW
 47 * Description    : CodeFlash 双字写,地址需4字节对齐
 48 * Input          : addr: 32位地址,需要4对齐
 49               dat: 32位写入数据
 50 * Return         : FAILED  - 错误
 51                    SUCCESS - 成功
 52 *******************************************************************************/
 53 UINT8 CodeFlash_WriteDW(UINT32 addr, UINT32 dat)
 54 {
 55     UINT8  status = 0;
 56 
 57     EnableCodeFlash();
 58     status = Flash_WriteDW( addr, dat );
 59     LockFlashALL();
 60 
 61     return ( status );
 62 }
 63 
 64 /*******************************************************************************
 65 * Function Name  : CodeFlash_WriteBuf
 66 * Description    : CodeFlash 连续多个双字写入
 67 * Input          : addr: 32位地址,需要4对齐
 68              pdat: 待写入数据缓存区首地址
 69               len: 待写入数据字节长度
 70 * Return         : FAILED  - 错误
 71                    SUCCESS - 成功
 72 *******************************************************************************/
 73 UINT8 CodeFlash_WriteBuf(UINT32 addr, PUINT32 pdat, UINT16 len)
 74 {
 75     UINT32  add = addr;
 76     PUINT32 p32 = pdat;
 77     UINT8   status = 0;    
 78     UINT16  i;
 79 
 80     EnableCodeFlash();
 81     for(i=0; i<len; i+=4)
 82     {
 83         status = Flash_WriteDW( add, *p32++ );        
 84         if( status != SUCCESS )  break;
 85         add += 4;
 86     }
 87     LockFlashALL();
 88 
 89     return ( status );
 90 }
 91 
 92 /*******************************************************************************
 93 * Function Name  : DataFlash_BlockErase
 94 * Description    : DataFlash 块擦除,一次擦除512B
 95 * Input          : addr: 32位地址,需要512对齐                           
 96 * Return         : FAILED  - 错误
 97                    SUCCESS - 成功
 98 *******************************************************************************/
 99 UINT8 DataFlash_BlockErase(UINT32 addr)
100 {
101     UINT8  status = 0;
102     
103     if( addr >= DATA_FLASH_SIZE )   return FAILED;
104     addr = addr + DATA_FLASH_ADDR;
105 
106     EnableDataFlash();
107     status = Flash_BlockErase( addr );
108     LockFlashALL();
109 
110     return ( status );
111 }
112 
113 /*******************************************************************************
114 * Function Name  : DataFlash_WriteDW
115 * Description    : DataFlash 双字写,地址需4字节对齐
116 * Input          : addr: 32位地址,需要4对齐
117                       dat: 32位写入数据
118 * Return         : FAILED  - 错误
119                           SUCCESS - 成功
120 *******************************************************************************/
121 UINT8 DataFlash_WriteDW(UINT32 addr, UINT32 dat)
122 {
123     UINT8  status = 0;
124 
125     if( addr >= DATA_FLASH_SIZE )       return FAILED;
126     addr = addr + DATA_FLASH_ADDR;
127 
128     EnableDataFlash();
129     status = Flash_WriteDW( addr, dat );
130     LockFlashALL();
131 
132     return ( status );
133 }
134 
135 
136 
137 int main()
138 { 
139     UINT16   i;
140     PUINT32  p32;
141     UINT8    buf[8];
142     PUINT16  p16;
143 
144 /* 配置串口调试 */   
145     DebugInit();
146     PRINT( "Start @ChipID=%02X\n", R8_CHIP_ID );    
147 
148 /*  */
149     PRINT( "GetUniqueID: ");     
150     GetUniqueID( buf );
151     p16 = (PUINT16)buf;
152     if( *(p16+3) == (*(p16+0) +  *(p16+1) + *(p16+2)) )     // 判断校验和
153     {
154         for(i=0; i<6; i++)
155         {
156             PRINT("%02x ", buf[i]);
157         }PRINT("\n");
158     }
159     else
160     {
161         PRINT( "UniqueID is error or none !!! \n");  
162     }
163     
164 
165 /* 获取网络MAC地址 */  
166     PRINT( "GetMACAddress: ");     
167     GetMACAddress( buf );
168     for(i=0; i<6; i++)
169     {
170         PRINT("%02x ", buf[i]);
171     }PRINT("\n");
172     
173 #if 1   
174 /* 测试 code 擦写读 */
175     p32 = (PUINT32)TEST_CODEADDR;
176     PRINT( "Read addr=0x%08lx :\n", (UINT32)p32 );    
177     for(i=0; i<TEST_CODESIZE; i++)
178     {
179         PRINT("%08lx ",*p32++);
180     }PRINT("\n");
181     
182     p32 = (PUINT32)TEST_CODEADDR;
183     PRINT( "Earse addr=0x%08lx : ", (UINT32)p32 );
184     i = CodeFlash_BlockErase( (UINT32)p32 );
185     if( i == SUCCESS )  PRINT("success..\n");
186     else                PRINT("failed..\n");
187  
188     p32 = (PUINT32)TEST_CODEADDR;
189     PRINT( "Read addr=0x%08lx :\n", (UINT32)p32 );    
190     for(i=0; i<TEST_CODESIZE; i++)
191     {
192         PRINT("%08lx ",*p32++);
193     }PRINT("\n");
194     
195     for(i=0; i<TEST_CODESIZE; i++)
196     {
197         TestBuf[i] = i;
198         TestBuf[i] = (TestBuf[i]<<8) | i;
199         TestBuf[i] = (TestBuf[i]<<8) | i;
200         TestBuf[i] = (TestBuf[i]<<8) | i;
201     }
202     
203     p32 = (PUINT32)TEST_CODEADDR;
204     PRINT( "Write addr=0x%08lx : ", (UINT32)p32 );
205     i = CodeFlash_WriteBuf( (UINT32)p32, TestBuf, TEST_CODESIZE*4 );
206     if( i == SUCCESS )  PRINT("success..\n");
207     else                PRINT("failed..\n");  
208 
209     p32 = (PUINT32)TEST_CODEADDR;
210     PRINT( "Read addr=0x%08lx :\n", (UINT32)p32 );    
211     for(i=0; i<TEST_CODESIZE; i++)
212     {
213         PRINT("%08lx ",*p32++);
214     }PRINT("\n");
215  
216 #endif    
217 
218 #if 1    
219 /* 测试 dataflash 擦写读 */
220     p32 = (PUINT32)(TEST_DATAFLASHADDR + DATA_FLASH_ADDR) ;
221     PRINT( "Read dataflash addr=0x%08lx :\n", (UINT32)p32 );    
222     for(i=0; i<TEST_DATAFLASHSIZE; i++)
223     {
224         PRINT("%08lx ",*p32++);
225     }PRINT("\n");
226     
227     p32 = (PUINT32)(TEST_DATAFLASHADDR);
228     PRINT( "Earse dataflash addr=0x%08lx : ", (UINT32)p32 );
229     i = DataFlash_BlockErase( (UINT32)p32 );
230     if( i == SUCCESS )  PRINT("success..\n");
231     else                PRINT("failed..\n");
232     
233     for(i=0; i<TEST_DATAFLASHSIZE; i++)
234     {
235         TestBuf[i] = (i+0x31);
236         TestBuf[i] = (TestBuf[i]<<8) | (i+0x31);
237         TestBuf[i] = (TestBuf[i]<<8) | (i+0x31);
238         TestBuf[i] = (TestBuf[i]<<8) | (i+0x31);
239     }
240     
241     p32 = (PUINT32)(TEST_DATAFLASHADDR);
242     PRINT( "Write dataflash addr=0x%08lx : ", (UINT32)p32 );
243     for(i=0; i<TEST_DATAFLASHSIZE; i++)
244     {
245         if( DataFlash_WriteDW( (UINT32)p32++, TestBuf[i])!=SUCCESS )  
246         {
247             break;
248         }            
249     }
250     if( i==TEST_DATAFLASHSIZE ) PRINT("success..\n");
251     else                        PRINT("failed..\n");
252     
253     p32 = (PUINT32)(TEST_DATAFLASHADDR + DATA_FLASH_ADDR);
254     PRINT( "Read dataflash addr=0x%08lx :\n", (UINT32)p32 );    
255     for(i=0; i<TEST_DATAFLASHSIZE; i++)
256     {
257         PRINT("%08lx ",*p32++);
258     }PRINT("\n");    
259  
260 #endif
261 
262     
263     while(1);    
264 }

 

Start @ChipID=79
GetUniqueID: UniqueID is error or none !!!
GetMACAddress: d1 30 01 e4 c2 84
Read addr=0x00006000 :
00000000 01010101 02020202 03030303 04040404 05050505 06060606 07070707 08080808 09090909 0a0a0a0a 0b0b0b0b 0c0c0c0c 0d0d0d0d 0e0e0e0e 0f0f0f0f 10101010 11111111 12121212 13131313 14141414 15151515 16161616 17171717 18181818 19191919 1a1a1a1a 1b1b1b1b 1c1c1c1c 1d1d1d1d 1e1e1e1e 1f1f1f1f 20202020 21212121 22222222 23232323 24242424 25252525 26262626 27272727 28282828 29292929 2a2a2a2a 2b2b2b2b 2c2c2c2c 2d2d2d2d 2e2e2e2e 2f2f2f2f 30303030 31313131 32323232 33333333 34343434 35353535 36363636 37373737 38383838 39393939 3a3a3a3a 3b3b3b3b 3c3c3c3c 3d3d3d3d 3e3e3e3e 3f3f3f3f 40404040 41414141 42424242 43434343 44444444 45454545 46464646 47474747 48484848 49494949 4a4a4a4a 4b4b4b4b 4c4c4c4c 4d4d4d4d 4e4e4e4e 4f4f4f4f 50505050 51515151 52525252 53535353 54545454 55555555 56565656 57575757 58585858 59595959 5a5a5a5a 5b5b5b5b 5c5c5c5c 5d5d5d5d 5e5e5e5e 5f5f5f5f 60606060 61616161 62626262 63636363
Earse addr=0x00006000 : success..
Read addr=0x00006000 :
ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
Write addr=0x00006000 : success..
Read addr=0x00006000 :
00000000 01010101 02020202 03030303 04040404 05050505 06060606 07070707 08080808 09090909 0a0a0a0a 0b0b0b0b 0c0c0c0c 0d0d0d0d 0e0e0e0e 0f0f0f0f 10101010 11111111 12121212 13131313 14141414 15151515 16161616 17171717 18181818 19191919 1a1a1a1a 1b1b1b1b 1c1c1c1c 1d1d1d1d 1e1e1e1e 1f1f1f1f 20202020 21212121 22222222 23232323 24242424 25252525 26262626 27272727 28282828 29292929 2a2a2a2a 2b2b2b2b 2c2c2c2c 2d2d2d2d 2e2e2e2e 2f2f2f2f 30303030 31313131 32323232 33333333 34343434 35353535 36363636 37373737 38383838 39393939 3a3a3a3a 3b3b3b3b 3c3c3c3c 3d3d3d3d 3e3e3e3e 3f3f3f3f 40404040 41414141 42424242 43434343 44444444 45454545 46464646 47474747 48484848 49494949 4a4a4a4a 4b4b4b4b 4c4c4c4c 4d4d4d4d 4e4e4e4e 4f4f4f4f 50505050 51515151 52525252 53535353 54545454 55555555 56565656 57575757 58585858 59595959 5a5a5a5a 5b5b5b5b 5c5c5c5c 5d5d5d5d 5e5e5e5e 5f5f5f5f 60606060 61616161 62626262 63636363
Read dataflash addr=0x0003ec00 :
31313131 32323232 33333333 34343434
Earse dataflash addr=0x00000400 : success..
Write dataflash addr=0x00000400 : success..
Read dataflash addr=0x0003ec00 :
31313131 32323232 33333333 34343434

 

posted @ 2020-03-05 11:29  kingboy100  阅读(841)  评论(0编辑  收藏  举报