单片机能否将收到的数据写入FLASH
请问各位一下,单片机能否将收到的数据写入FLASH。举个例子,假设在单片机程序内存在变量A,当前A=0,在接收到外部给发送的数据后(如数字2),将该数字保存在A中(A=2),掉电后数据不丢失,下次开机A的数据依旧是接收到的数值(即A依旧等于2)
上述功能能否实现,如果能可否给出上述功能的代码示例在这里先谢谢各位了
额。这个没试过。但是好像可以。但是要用高电压驱动。430不是可以吗。那51 应该也可以吧。不过没用过不敢讲
当然可以,不是所有单片机都有flash编程这个功能的,但绝大多数单片机都有eeprom,在进行flash编程时要注意地址,别把程序擦除了,而编程eeprom就没这个问题,就保存一个数找个带eeprom 的就行了
强大啊啊啊啊,牛人啊
值得学习下,很少对FLASH进行操作
人家小编要代码呢。
我这也没有
我都没想过这个问题
EEPROM写入确实比往flash写入方便多了,之前的自己做的那个小项目改成了往EEPROM里写入数据了,自己的开发经验还是不足啊
看大牛回复,顺便学习一下。
/*
* Erase Sector in Flash Memory
* Parameter: adr: Sector Address
* Return Value: 0 - OK, 1 - Failed
*/
int EraseSector (unsigned long adr) {
unsigned long n;
n = GetSecNum(adr); // Get Sector Number
IAP.cmd = 50; // Prepare Sector for Erase
IAP.par[0] = n; // Start Sector
IAP.par[1] = n; // End Sector
IAP_Call (&IAP.cmd, &IAP.stat); // Call IAP Command
if (IAP.stat) return (1); // Command Failed
IAP.cmd = 52; // Erase Sector
IAP.par[0] = n; // Start Sector
IAP.par[1] = n; // End Sector
IAP.par[2] = CCLK; // CCLK in kHz
IAP_Call (&IAP.cmd, &IAP.stat); // Call IAP Command
if (IAP.stat) return (1); // Command Failed
return (0); // Finished without Errors
}
/*
* Program Page in Flash Memory
* Parameter: adr: Page Start Address
* sz: Page Size
* buf: Page Data
* Return Value: 0 - OK, 1 - Failed
*/
int ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf) {
unsigned long n;
#if SET_VALID_CODE != 0 // Set valid User Code Signature
if (adr == 0) { // Check for Vector Table
n = *((unsigned long *)(buf + 0x00)) +
*((unsigned long *)(buf + 0x04)) +
*((unsigned long *)(buf + 0x08)) +
*((unsigned long *)(buf + 0x0C)) +
*((unsigned long *)(buf + 0x10)) +
*((unsigned long *)(buf + 0x14)) +
*((unsigned long *)(buf + 0x18));
*((unsigned long *)(buf + 0x1C)) = 0 - n; // Signature at Reserved Vector
}
#endif
n = GetSecNum(adr); // Get Sector Number
IAP.cmd = 50; // Prepare Sector for Write
IAP.par[0] = n; // Start Sector
IAP.par[1] = n; // End Sector
IAP_Call (&IAP.cmd, &IAP.stat); // Call IAP Command
if (IAP.stat) return (1); // Command Failed
IAP.cmd = 51; // Copy RAM to Flash
IAP.par[0] = adr; // Destination Flash Address
IAP.par[1] = (unsigned long)buf; // Source RAM Address
IAP.par[2] = 1024; // Fixed Page Size
IAP.par[3] = CCLK; // CCLK in kHz
IAP_Call (&IAP.cmd, &IAP.stat); // Call IAP Command
if (IAP.stat) return (1); // Command Failed
return (0); // Finished without Errors
}
小白老实说。看得我好晕啊~!
为什么单片机中既有Flash又有EEPROM - 单片机实验 - 电子发烧友网 http://www.elecfans.com/lab/MCU/20161227464036.html
看不懂啊啊啊啊啊啊啊啊啊啊啊啊啊
看不懂啊啊啊啊啊啊啊啊 啊啊啊啊啊哈哈哈哈或或或
