亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? te28f256.c

?? vxWorks V5.5下Flash驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*************************************************************************   
Flash Disk  Driver for Intel e28f256(P30)
this flash is BP,so we know the param block at front.ya!
driver code must be use ansi c write
Manufacture Code 00000 (00) 89
Device Code 256-Mbit      00001 (00) 1c

shenming  write  2006-08 
*************************************************************************/

#define  DEBUG_TFFS28F256
#undef   DEBUG_TFFS28F256

#include "tffs/flflash.h"
#include "tffs/backgrnd.h"
#include "ppc405EP.h"


#include "stdio.h"
#include "stdlib.h"
#include "string.h"



/* JEDEC ids for this MTD */
#define E28F256_MANU_ID                    0x0089  
#define E28F256_DEVICE_ID                  0x891c  
#define E28F256_FLASH                      0x891c 

#define CLEAR_LOCK_BIT                     0x6060
#define CONFIRM_CLEAR_LOCK_BIT             0xd0d0
#define SETUP_ERASE	                       0x2020
#define SETUP_WRITE	                       0x1010
#define WRITE_TO_BUFFER                    0xe8e8
#define CLEAR_STATUS                       0x5050
#define READ_STATUS                        0x7070
#define READ_ID                            0x9090
#define SUSPEND_WRITE                      0xb0b0
#define SUSPEND_ERASE                      0xb0b0
#define CONFIRM_ERASE                      0xd0d0
#define CONFIRM_WRITE                      0xd0d0
#define RESUME_ERASE                       0xd0d0
#define READ_ARRAY	                       0xffff


#define	WSM_VPP_ERROR                      0x08
#define   WSM_ERROR	                       0x38
#define   WSM_SUSPENDED	                   0x40
#define   WSM_READY                        0x80
#define   GSR_ERROR                        0x20

/********************************************************************
                       e28f256MTDMap	
map the offset address to flash  mmc address
DEBUG:ok 
2006-8-29
*********************************************************************/

static void FAR0 * e28f256MTDMap(FLFlash vol, CardAddress addr, int inter)
{
    /*FLASH1_START  is the flash address begin 0xf0000000*/
    /*the param block ox20000 must stride*/

    UINT32 ret;
    ret = FLASH1_START + 0x20000+addr;
    vol.socket->remapped = TRUE;
    return (void FAR0 *)ret;

}

/********************************************************************
                      e28f256Write			
									
 Write a block of bytes to Flash					
									
 This routine will be registered as the MTD flash.write routine	
									
 Parameters:                                                          
	vol		       : Pointer identifying drive			
    address		: Card address to write to			
    buffer		: Address of data to write			
	length		: Number of bytes to write			
	overwrite	: TRUE if overwriting old Flash contents	
			  FALSE if old contents are known to be erased	
                                                                      
 Returns:                                                             
	FLStatus	: 0 on success, failed otherwise
	
	
DEBUG: ok		
*********************************************************************/

static FLStatus e28f256Write(FLFlash vol,
                            CardAddress address,/*the block offser address*/
                            const void FAR1 *buffer,/*the byte buffer*/
                            int length,
                            FLBoolean overwrite)
{
    int i,cLength;
    FLStatus status = flOK;
    FlashWPTR flashPtr,flashTmp;
    volatile UINT16 *gBuffer;

#ifdef DEBUG_TFFS28F256
    printf("into e28f256Write function\n");
#endif

    if (flWriteProtected(vol.socket))
        return flWriteProtect;
 
    if ((length & 1) || (address & 1)) /* Only write words on word-boundary */
        return flBadParameter;
        
#ifdef SOCKET_12_VOLTS
    checkStatus(flNeedVpp(vol.socket));
#endif

    flashTmp = flashPtr = (FlashWPTR) vol.map(&vol, address, vol.interleaving); 

#ifdef DEBUG_TFFS28F256
    printf("e28f256Write will write  (flashTmp,flashPtr)= 0x%x address=0x%x length=0x%x \n",flashPtr,address,length);
#endif

/*must unlock the block*/

    flashPtr[0] = CLEAR_LOCK_BIT; 
            
    do{}while(!(flashPtr[0] & WSM_READY ));

    flashPtr[0] = CONFIRM_CLEAR_LOCK_BIT;
    
    do{}while(!(flashPtr[0] & WSM_READY ));


/*buffer unsigned char type buffer to  unsigned short buffer and write the data*/
    cLength = length/2;
    gBuffer = (UINT16 *)buffer;  

    for(i = 0; i < cLength; i++)
    {
        *flashPtr = SETUP_WRITE;
        do{}while(!(flashPtr[0] & WSM_READY ));
        *flashPtr = *gBuffer;
        do{}while(!(flashPtr[0] & WSM_READY ));
        flashPtr++;
        gBuffer++;
        *flashPtr = READ_ARRAY;
    }
  
#ifdef DEBUG_TFFS28F256
    printf("e28f256Write successed wirte to flashPtr= 0x%x address=0x%x length=0x%x\n",flashPtr,address,length);
#endif

#ifdef SOCKET_12_VOLTS
    flDontNeedVpp(vol.socket);
#endif

    /* verify the data */

    if (status == flOK && tffscmpWords((void FAR0 *) flashTmp, (void FAR1 *) buffer,length)) 
    {
#ifdef DEBUG_TFFS28F256
    printf("verify data error!.\n");
    printf("ya! error exit e28f256Write function\n");
#endif
        status = flWriteFault;
        return status;
    }
#ifdef DEBUG_TFFS28F256
    printf("successed exit e28f256Write function\n\n");
#endif  
   
    return status;
}


/********************************************************************
                      te28f256Erase			
									
 Erase one or more contiguous Flash erasable blocks			
									
 This routine will be registered as the MTD vol.erase routine	
									
 Parameters:                                                          
	vol		: Pointer identifying drive			
    firstErasableBlock : Number of first block to erase		
	numOfErasableBlocks: Number of blocks to erase			
                                                                      
 Returns:                                                             
	FLStatus	: 0 on success, failed otherwise
	
DEBUG: ok			
********************************************************************/

FLStatus e28f256Erase(FLFlash vol,
			   int firstErasableBlock,
			   int numOfErasableBlocks)
{
    FLStatus status = flOK; /* unless proven otherwise */
    FlashWPTR flashPtr;
    FlashWPTR addr;
    int i=0;
    FLBoolean finished;
 

    if (flWriteProtected(vol.socket))
        return flWriteProtect;
  
#ifdef DEBUG_TFFS28F256
    printf("into e28f256Erase function  firstErasableBlock=0x%x,numOfErasableBlocks=0x%x.\n",firstErasableBlock,numOfErasableBlocks);
#endif  
 
#ifdef SOCKET_12_VOLTS
    checkStatus(flNeedVpp(vol.socket));
#endif

    flashPtr = (FlashWPTR) vol.map (&vol,(firstErasableBlock) * vol.erasableBlockSize,vol.interleaving);

#ifdef DEBUG_TFFS28F256
    printf("the flash addr  flashPtr=0x%x.\n",flashPtr);
#endif

   
    for(;i<numOfErasableBlocks;++i)
    {
        addr = flashPtr + i * vol.erasableBlockSize;

/*unlock*/
        addr[0] = CLEAR_LOCK_BIT;         
        do{}while(!(addr[0] & WSM_READY ));
        addr[0] = CONFIRM_CLEAR_LOCK_BIT ;
        do{}while(!(addr[0] & WSM_READY ));

/*start erase*/
        addr[0] = SETUP_ERASE;
        do{}while(!(addr[0] &WSM_READY ));
        
 /*confirm erase*/
        addr[0] = CONFIRM_ERASE; 
 	
        do{}while(!(addr[0] &WSM_READY ));
        
        do{
            finished = TRUE;
            if (!(addr[0] & WSM_READY ))
                finished = FALSE;
            else{
                if ( addr[0] & WSM_ERROR ) 
                {
#ifdef DEBUG_PRINT
    DEBUG_PRINT("erase error.\n");
#endif
                    status = (addr[0] & WSM_VPP_ERROR ) ?  flVppFailure : flWriteFault;
                    addr[0] = CLEAR_STATUS;
                }
/*set device read mode*/
                addr[0] = READ_ARRAY;
            }
        } while (!finished);
   }

#ifdef SOCKET_12_VOLTS
    flDontNeedVpp(vol.socket);
#endif

#ifdef DEBUG_TFFS28F256
    printf("exit e28f256Erase function\n\n");
#endif
    return status;

}


/********************************************************************
                     te28f256Identify                             	
									                                    
 Identifies media based on Intel e28f256 and registers as an MTD for	
 such.                                                                
									
 This routine will be placed on the MTD list in custom.h. It must be	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一久久影院| 水野朝阳av一区二区三区| 欧美激情一区二区三区蜜桃视频| 欧美精品一区二区三区视频| wwwwxxxxx欧美| 一区二区三区波多野结衣在线观看 | 成人理论电影网| 91久久精品网| 国产亚洲欧美一级| 视频一区中文字幕国产| 国产福利91精品一区二区三区| 99精品偷自拍| 亚洲精品在线三区| 亚洲国产欧美在线人成| 国产激情一区二区三区四区| 欧美日韩国产一区二区三区地区| 国产亚洲一二三区| 国精产品一区一区三区mba视频| 91久久久免费一区二区| 久久久久久久综合| 九色综合国产一区二区三区| 97精品电影院| 日韩伦理免费电影| 99r精品视频| 国产精品日产欧美久久久久| 日本不卡视频在线观看| 欧美三电影在线| 亚洲国产精品一区二区www在线| 国产不卡视频在线播放| 欧美videofree性高清杂交| 亚洲影院免费观看| 成人一区二区三区视频在线观看| 久久众筹精品私拍模特| 国产精品一区一区| 中文子幕无线码一区tr| 99免费精品在线观看| 国产精品盗摄一区二区三区| 91无套直看片红桃| 亚洲一卡二卡三卡四卡| 色八戒一区二区三区| 首页国产欧美久久| 717成人午夜免费福利电影| 琪琪久久久久日韩精品| 337p粉嫩大胆色噜噜噜噜亚洲| 麻豆91免费看| 一区二区中文字幕在线| 欧美日韩成人一区| 国产乱码精品一区二区三| 中文字幕亚洲电影| 日韩欧美国产电影| 成人福利视频在线| 午夜精品福利在线| 国产精品三级av| 欧美精品色综合| aaa国产一区| 99久精品国产| 国产九九视频一区二区三区| 亚洲自拍偷拍综合| 国产日韩高清在线| 久久久精品免费网站| 欧美一区在线视频| 91污片在线观看| 国产成人精品网址| 日韩成人精品在线| 一区二区三区美女视频| 中文字幕制服丝袜成人av | 国产精品色婷婷| 91精品国产一区二区三区| 一本色道a无线码一区v| 丁香网亚洲国际| 国产高清在线精品| 九九视频精品免费| 视频精品一区二区| 亚洲免费av网站| 中文字幕一区二区三区四区不卡| 欧美精品一区二区精品网| 欧美一区二区成人| 日韩视频123| 欧美videofree性高清杂交| 日韩欧美中文字幕制服| 日韩欧美黄色影院| 欧美电影免费提供在线观看| 337p日本欧洲亚洲大胆精品 | 精品一区二区三区免费播放| 免费高清不卡av| 韩国女主播一区二区三区| 精品一区二区久久| 久久99精品国产麻豆不卡| 国产主播一区二区| a4yy欧美一区二区三区| 欧美日韩在线播放一区| 91精品国产综合久久久久| 久久伊人中文字幕| 一区二区三区日韩| 国产精品一区二区三区四区| 精品一二三四区| 在线亚洲精品福利网址导航| 欧美美女bb生活片| 亚洲国产经典视频| 日韩激情视频在线观看| 国产成人aaaa| 欧美一区二区三级| 一区二区三区精品| 波多野结衣欧美| 日韩欧美高清一区| 亚洲精品日韩专区silk| 国产一区二区在线电影| 欧美日韩国产综合久久 | 国产.欧美.日韩| 日韩一二三四区| 亚洲综合网站在线观看| 波波电影院一区二区三区| 日韩精品一区二区三区swag| 亚洲精品写真福利| 99精品国产视频| ...xxx性欧美| 99久久精品99国产精品| 国产亚洲一区二区三区四区| 国产专区欧美精品| 精品国产免费一区二区三区香蕉| 日韩精品色哟哟| 91精品国产综合久久婷婷香蕉 | 欧美精品一区二区三区久久久| 午夜久久久久久电影| 欧美视频一区二区在线观看| 中文字幕一区二区三区乱码在线| 成人av在线一区二区三区| 国产精品国产馆在线真实露脸| 国产白丝精品91爽爽久久| 久久久久久久久久电影| 久久av中文字幕片| 国产欧美中文在线| 色欧美88888久久久久久影院| 一区二区三区在线高清| 欧美日韩在线精品一区二区三区激情| 一区二区三区国产精华| 日韩午夜在线影院| 国产成人日日夜夜| 亚洲毛片av在线| 欧美一级片在线看| 99久久婷婷国产综合精品| 午夜久久久久久久久久一区二区| 日韩欧美电影一区| 日本黄色一区二区| 精品一区二区在线视频| 最新成人av在线| 久久精品男人天堂av| 97久久精品人人爽人人爽蜜臀| 亚洲永久精品国产| 国产精品久久午夜夜伦鲁鲁| 欧美性淫爽ww久久久久无| 国产成人av一区二区三区在线 | 色综合久久88色综合天天免费| 奇米影视7777精品一区二区| 国产精品久久久久久久久图文区| 欧美日韩在线播放一区| 91免费版在线| 99综合电影在线视频| 国产盗摄视频一区二区三区| 亚洲第一会所有码转帖| 日本一区二区三区久久久久久久久不| 欧美群妇大交群中文字幕| 色综合中文字幕国产 | 日韩专区在线视频| 亚洲国产欧美另类丝袜| 亚洲欧美综合网| 亚洲精品老司机| 国产精品超碰97尤物18| 国产女人aaa级久久久级| 久久久久久免费毛片精品| 久久综合久久鬼色| 国产精品久久久久精k8| 亚洲免费在线看| 亚欧色一区w666天堂| 亚洲国产日韩在线一区模特| 亚洲综合激情另类小说区| 亚洲理论在线观看| 美女一区二区视频| 成人福利视频在线看| 91久久国产综合久久| 欧美日精品一区视频| 精品国产制服丝袜高跟| 国产欧美一区视频| 午夜欧美一区二区三区在线播放| 午夜久久久久久久久久一区二区| 美女一区二区三区在线观看| 国产曰批免费观看久久久| 99久久99久久精品国产片果冻| 欧美在线观看视频在线| 精品国产一区二区三区不卡| 国产精品麻豆99久久久久久| 亚洲电影激情视频网站| 成人免费高清视频在线观看| 欧美乱妇一区二区三区不卡视频| 久久久99久久| 日韩精品欧美精品| 盗摄精品av一区二区三区| 777奇米四色成人影色区| 国产精品看片你懂得| 久久国产夜色精品鲁鲁99|