AT91SAM7S64可以自己写自己的FLASH麽?
有人做过麽~./emotion/em009.gif http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_195135.gif 谁能讲讲分散加载在sram中读写flash的方法~ http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_195172.gif DDD~它支持IAP麽~./emotion/em008.gif 遇到困难了~有人读写过at91sam7s64自己的flash麽~ ./emotion/em009.gif 肯定可以,要不就没有内建于ROM的BOOTLOADER了,我也在搞,想自已写处BOOTLOADER, 可以,我用LPC2138是可以写的。 我已经做成功了~贴上来~给有需要的人~
NND~几句破代码,被搞得神神秘秘的~鄙视一下~
__ramfunc void Read_Page(int Page_Number,int *Buffer,int len)
{
unsigned int*Flash_Address;
int i;
Flash_Address = ( unsigned int* )( 0x100000+Page_Number*256 );
//每次读是一个字,四个字节
for( i = 0; i < len; i++ )
{
Buffer[ i ] = *( Flash_Address + i );
}
}
__ramfunc int Write_Page( int Page_Number,int *Buffer,int len)
{
unsigned int*Flash_Address;
int i;
AT91C_BASE_MC->MC_FMR = ( ( 72 ) << 16 ) | AT91C_MC_FWS_1FWS;//编程前页擦除
AT91C_BASE_MC->MC_FCR = ( 0x5A << 24 ) | ( ( Page_Number << 8 ) & AT91C_MC_PAGEN) | AT91C_MC_FCMD_UNLOCK ;//解锁
while ( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 );
Flash_Address = ( unsigned int* )( 0x100000+Page_Number*256 );
//每次写是一个字,四个字节
for( i = 0; i < len; i++ )
{
*( Flash_Address + i ) = Buffer[ i ];
}
if( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 )
{
return -1;
}
AT91C_BASE_MC->MC_FCR = ( 0x5A << 24 ) | ( ( Page_Number << 8 ) & AT91C_MC_PAGEN) | AT91C_MC_FCMD_PROG_AND_LOCK ; //编程及锁定
while( 1 )
{
if( AT91C_BASE_MC->MC_FSR & 0x01 )
{
if( AT91C_BASE_MC->MC_FSR & AT91C_MC_LOCKE )
{
return -1;
}
if( AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE )
{
return -1;
}
break;
}
}
return 1;
} //Write_Page 谢谢分享 楼主请教下,我用您的程序 好像不能实现在线编程哦我是想实现这样的功能:用户程序运行时,保存一下数据到FLASH,下次上电时可以读到这些数据。 是不是对FLASH编程的IAP程序不能运行在FLASH中,必须copy到RAM中运行呢???? {:smile:}{:smile:}{:smile:} 牛人总是有的!
支持楼主!
页:
[1]