📄 hy29lv160.c
字号:
/*-------------------------------------------------------------------
Function : Erase and Programmer HY29LV160
Author : kreal@163.net
Creat Date: 04-05-12
---------------------------------------------------------------------*/
#define HY29LV160_G
#include "sysincludes.h"
#define ResetFlash() WR( 0, 0xf0f0 )
void WR( ushort addr, ushort data )
{
volatile ushort *pAddr ;
pAddr = ( ushort * ) (addr << 1 ) ;
*pAddr = data ;
}
ushort RD( ushort addr )
{
ushort data ;
volatile ushort *pAddr ;
pAddr = ( ushort *) ( addr<<1 ) ;
data = *pAddr ;
return data ;
}
void CheckFlashID( void )
{
ushort ManID ,devId ;
// ResetFlash() ;
WR( 0x555, 0xAAAA) ;
WR( 0x2AA, 0x5555 ) ;
WR( 0x555, 0x9090 ) ;
ManID = RD( 0x0 ) ;
// ResetFlash() ;
WR( 0x555,0xaaaa );
WR( 0x2aa,0x5555 );
WR( 0x555,0x9090 );
devId= RD( 0x1 );
if( ManID == 0xAD && devId == 0x2249 )
printf( "\r\nFlash Id 0x2249") ;
else
printf( "\r\nFlashId Error ") ;
ResetFlash() ;
}
char DectOver( ushort *ptr , ushort TrueData, ulong timecount )
{
ulong tmptime = timecount ;
volatile ushort *pAddr ;
ushort CurTrueData ;
CurTrueData = TrueData &0x8080 ;
pAddr = ptr ;
while( (*pAddr&0x8080) != CurTrueData )
{
if( tmptime-- == 0 ) return FALSE ;
} // D7
return TRUE ;
}
char EraseSector( ushort *EraseAddr )
{
volatile ushort *FlashEraseAddr ;
FlashEraseAddr = EraseAddr ;
WR( 0x555, 0xAAAA ) ;
WR( 0x2AA, 0x5555 ) ;
WR( 0x555, 0x8080 ) ;
WR( 0x555, 0xAAAA ) ;
WR( 0x2AA, 0x5555 ) ;
*FlashEraseAddr = 0x3030 ;
if(!DectOver((ushort *) FlashEraseAddr , 0xFFFF, 0x8000000 ))
return FALSE ;
else
return TRUE ;
}
char ProgramData( uint InAddr , ushort *buf16, ulong Len )
{
ushort *ptr ;
ptr = ( ushort * ) (InAddr&0xFFFFE) ;
while( Len > 0 )
{
WR( 0x555, 0xAAAA ) ;
WR( 0x2AA, 0x5555 ) ;
WR( 0x555, 0xA0A0 ) ;
*ptr = *buf16 ;
DectOver( (ushort * )ptr, *buf16, 0x8000000 ) ;
buf16 ++ ;
ptr ++ ;
Len-- ;
}
return TRUE ;
}
char FlashErase( uint StartAddr, uint EndAddr )
{
StartAddr &= 0xFFFFE ;
EndAddr &= 0xFFFFE ;
if( EndAddr < StartAddr ) return FALSE ;
while( StartAddr <= EndAddr )
{
if( !EraseSector( (ushort * )StartAddr )) return FALSE ;
StartAddr += 0x10000 ;
}
return TRUE ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -