共2条
1/1 1 跳转至页
SST39VF160 SST39VF160编程操作问题
问
********************************************************************/
功能:SST39VF160编程操作,写两字节数据到芯片0地址,再读出来校验
*******************************************************************/
WordProgram(0x0, 0x55AA);// 向FLASH的0地址写入0x55AA
addr = (volatile uint16 *)FLASH_ADDR + 0;
if(0x55AA != (*addr)) err = 1;// 读出校验,若数据错误则设置err=1
1.其中addr = (volatile uint16 *)FLASH_ADDR + 0;
为什么不写成,addr = (volatile uint16 *)FLASH_ADDR .百思不得其解.
2.要是连续写芯片0地址到0x0F地址该怎么改程序? 答 1: 还有/****************************************************************************
* 名 称:WordProgram()
* 功 能:半字(16位)数据编程。
* 入口参数:Addr 编程地址(SST39VF160内部地址)
* Data 编程数据
* 出口参数:返回TRUE表示操作成功,返回FALSE表示操作失败
****************************************************************************/
uint8 WordProgram(uint32 Addr, uint16 Data)
{
volatile uint16 *ip;
uint16 temp1,temp2;
ip = GetAddr(0x5555); // 转换地址0x5555
ip[0] = 0xaaaa; // 第一个写周期,地址0x5555,数据0xAA
ip = GetAddr(0x2aaa);
ip[0] = 0x5555; // 第二个写周期,地址0x2aaa,数据0x55
ip = GetAddr(0x5555);
ip[0] = 0xa0a0; // 第三个写周期,地址0x5555,数据0xA0
ip = (volatile uint16 *)(FLASH_ADDR|(Addr&0x1FFFFF));
*ip = Data; // 第四个写周期,地址Addr,数据Data
while (1) // 等待操作完成 (若编程操作没有完成,每次读操作DQ6会跳变)
{
temp1 = *ip;
temp2 = *ip;
if (temp1 == temp2)
{
if (temp1 != Data)
{
return(FALSE);
}
else
{
return(TRUE);
}
}
}
return(TRUE);
}
这一句ip = (volatile uint16 *)(FLASH_ADDR|(Addr&0x1FFFFF));是什么意思,也不太明白. 答 2: re:1.其中addr = (volatile uint16 *)FLASH_ADDR + 0;
为什么不写成,addr = (volatile uint16 *)FLASH_ADDR .百思不得其解.
解:可以写成你说的表达式,这里只是一个软件
工程师思想严谨的表现,FLASH_ADDR是物理
起始地址,+后面的数字指FLASH的本身地址,
这里是将FLASH地址与ARM的寻址地址转换而
已。
2.要是连续写芯片0地址到0x0F地址该怎么改程序?
解:根据1上面所提到的,可以将+后面数字用变量
x来替代,x=0--0x0F,这样就可以读出你需要
数据。
3.ip = (volatile uint16 *)(FLASH_ADDR|(Addr
&0x1FFFFF));是什么意思,也不太明白.
解:是为了保证Addr在有效的FLASH空间地址范围
答 3: 非常感谢foyyof的回复. 非常感谢foyyof的回复.看了您的回复,前面两问我弄明白了.第三问还有点不太懂,为什么是"(Addr&0x1FFFFF)" 与呢?0x1FFFFF代表的是什么?
能再帮我解答下吗?谢谢1
功能:SST39VF160编程操作,写两字节数据到芯片0地址,再读出来校验
*******************************************************************/
WordProgram(0x0, 0x55AA);// 向FLASH的0地址写入0x55AA
addr = (volatile uint16 *)FLASH_ADDR + 0;
if(0x55AA != (*addr)) err = 1;// 读出校验,若数据错误则设置err=1
1.其中addr = (volatile uint16 *)FLASH_ADDR + 0;
为什么不写成,addr = (volatile uint16 *)FLASH_ADDR .百思不得其解.
2.要是连续写芯片0地址到0x0F地址该怎么改程序? 答 1: 还有/****************************************************************************
* 名 称:WordProgram()
* 功 能:半字(16位)数据编程。
* 入口参数:Addr 编程地址(SST39VF160内部地址)
* Data 编程数据
* 出口参数:返回TRUE表示操作成功,返回FALSE表示操作失败
****************************************************************************/
uint8 WordProgram(uint32 Addr, uint16 Data)
{
volatile uint16 *ip;
uint16 temp1,temp2;
ip = GetAddr(0x5555); // 转换地址0x5555
ip[0] = 0xaaaa; // 第一个写周期,地址0x5555,数据0xAA
ip = GetAddr(0x2aaa);
ip[0] = 0x5555; // 第二个写周期,地址0x2aaa,数据0x55
ip = GetAddr(0x5555);
ip[0] = 0xa0a0; // 第三个写周期,地址0x5555,数据0xA0
ip = (volatile uint16 *)(FLASH_ADDR|(Addr&0x1FFFFF));
*ip = Data; // 第四个写周期,地址Addr,数据Data
while (1) // 等待操作完成 (若编程操作没有完成,每次读操作DQ6会跳变)
{
temp1 = *ip;
temp2 = *ip;
if (temp1 == temp2)
{
if (temp1 != Data)
{
return(FALSE);
}
else
{
return(TRUE);
}
}
}
return(TRUE);
}
这一句ip = (volatile uint16 *)(FLASH_ADDR|(Addr&0x1FFFFF));是什么意思,也不太明白. 答 2: re:1.其中addr = (volatile uint16 *)FLASH_ADDR + 0;
为什么不写成,addr = (volatile uint16 *)FLASH_ADDR .百思不得其解.
解:可以写成你说的表达式,这里只是一个软件
工程师思想严谨的表现,FLASH_ADDR是物理
起始地址,+后面的数字指FLASH的本身地址,
这里是将FLASH地址与ARM的寻址地址转换而
已。
2.要是连续写芯片0地址到0x0F地址该怎么改程序?
解:根据1上面所提到的,可以将+后面数字用变量
x来替代,x=0--0x0F,这样就可以读出你需要
数据。
3.ip = (volatile uint16 *)(FLASH_ADDR|(Addr
&0x1FFFFF));是什么意思,也不太明白.
解:是为了保证Addr在有效的FLASH空间地址范围
答 3: 非常感谢foyyof的回复. 非常感谢foyyof的回复.看了您的回复,前面两问我弄明白了.第三问还有点不太懂,为什么是"(Addr&0x1FFFFF)" 与呢?0x1FFFFF代表的是什么?
能再帮我解答下吗?谢谢1
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |