这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » SST39VF160 SST39VF160编程操作问题

共2条 1/1 1 跳转至

SST39VF160 SST39VF160编程操作问题

院士
2006-09-17 18:14:16     打赏
SST39VF160 SST39VF160编程操作问题



关键词: SST39VF160     编程     操作     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 ********************************************************************/
功能: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 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]