Answers:
是的你可以。我已经做了很多次了。
但是,相对于使用单独的EEPROM有一些缺点:
许多PIC18具有EEPROM存储器,最大容量为1K。不幸的是,您引用的PIC18F46J50没有。如果有EEPROM,则如果它足以容纳您的数据,则是一个更好的选择,因为EEPROM至少具有1,000,000个擦除/写入周期,而闪存只有10,000个。
PIC18与大多数其他微控制器一样,使用所谓的哈佛体系结构,这意味着程序和数据在物理上存在单独的可寻址区域(即,您可以拥有一个程序地址4和一个数据地址4,它们并不相同)。因此,您不能使用C或汇编语言的常规方法读取或写入闪存。
相反,在PIC18系列上,您在称为TBLPTR的22位寄存器中设置了起始地址。要从闪存读取字节,请使用TBLRD指令。您可以选择在读取后自动递增或递减地址,而不必手动进行。
要写入闪存,您必须先擦除一个或多个要写入的64字节闪存块。在TBLPTR中再次设置起始地址以及其他寄存器中的值以初始化擦除操作后,中断被禁用,然后必须立即将0x55写入,并将0xAA写入寄存器;这会解锁擦除命令,这是防止错误代码意外擦除内存所必需的。最后,执行实际执行擦除的命令,然后重新启用中断。
写入闪存类似于擦除,只是块大小较小。该写操作实际上是使用TBLWT指令执行的,该指令也可以像TBLRD指令一样自动递增/递减。
除了保存配置数据外,写入闪存还允许人们使用所谓的“空中固件”在现场更新其固件。您需要有一个固定的固件块,通常在程序存储器的开头,可以从蓝牙模块,Wi-Fi,蜂窝模块甚至有线连接接收更新,并在其中的某个点以上更新闪存。带有新代码的程序(例如“栅栏”)。更新完成后,将启动重置,并使用新代码。
除PIC系列产品外,其他许多微控制器也具有更新其闪存的能力。大多数使用配置寄存器,地址指针和特殊指令的组合来执行任务。