FLASH写不进去,怎么回事?

wutieying   2006-10-18 06:06 楼主
FLASH是SST39VF400A,原理图用的和CCS文档中的提供的,DSP是TMS320C6701,程序跑起来,运行到写数据就死了,不知道怎么回事?
代码如下:
void main()
{
    int f;
   
    f = Check_SST_39VF400A();
    if(!f)
       return;
   
    Erase_Entire_Chip();
}
int Check_SST_39VF400A()              
{
        int*ctrl_addr1;
        int*ctrl_addr2;
        int  SST_id1;
        int  SST_id2;
        int  ReturnStatus;

        /*  Issue the Software Product ID code to 39VF400A   */

        ctrl_addr1 = (int*)((int)flash_ptr+(0x5555<<2));
        ctrl_addr2 = (int*)((int)flash_ptr+(0x2aaa<<2));
        
        *ctrl_addr1= 0xAAAA;                 /* write data 0xAAAA to the address1 */
      
//        ctrl_addr2 = (int*)((int)flash_ptr+(0x2AAA<<2));
//      只能运行到这里!
        
        *ctrl_addr2= 0x5555;                 /* write data 0x5555 to the address2 */
      
//         ctrl_addr1 = (int*)((int)flash_ptr+(0x5555<<2));
      
        *ctrl_addr1= 0x9090;                 /* write data 0x9090 to the address1 */

        Delay(150);       /* insert delay time = 150 ns         */

        /* Read the product ID from 39VF400A */
                ctrl_addr1 = (int*)((int)flash_ptr+(0x0000<<2));
        ctrl_addr2 = (int*)((int)flash_ptr+(0x0001<<2));
        
      
        SST_id1  =  *ctrl_addr1;              /* get first ID int               */
        SST_id1  =  SST_id1 & 0xFF;           /* mask of higher char            */
        SST_id2  =  *ctrl_addr2;             /* get second ID int              */

        /* Determine whether there is a SST39VF400A installed or not */

        if ((SST_id1 == SST_ID) && (SST_id2 ==SST_39VF400A))
                ReturnStatus = TRUE;
        else
                ReturnStatus = FALSE;

        /* Issue the Soffware Product ID Exit code thus returning the 39VF400A*/
        /* to the read operating mode                                         */

                ctrl_addr1 = (int*)((int)flash_ptr+(0x5555<<2));
        ctrl_addr2 = (int*)((int)flash_ptr+(0x2aaa<<2));
        
        *ctrl_addr1= 0xAAAA;                 /* write data 0xAAAA to the address1 */
      
        *ctrl_addr2= 0x5555;                 /* write data 0x5555 to the address2 */
      
        *ctrl_addr1= 0xF0F0;                 /* write data 0xF0F0 to the address1 */
      
        Delay(150);        /* insert delay time = 150 ns          */

        return(ReturnStatus);
}

回复评论 (4)

你在擦除flash前的操作干吗呢?对flash应该擦除成功后坐进行写操作吧。因为flash里面只会从1变0。所以应该擦除成功后即flash空间都变为FFFF后,在写的!
点赞  2006-10-19 02:30
建议吧Erase_Entire_Chip();放到你的子函数顶部
点赞  2006-10-19 02:56
使用Flashburn
点赞  2006-10-19 16:40
CCS6000没有烧写插件,只有用Flashburn
点赞  2006-10-20 00:42
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复