亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区| 欧美另类变人与禽xxxxx| 国产精品三级久久久久三级| 青青草97国产精品免费观看无弹窗版| 成人h版在线观看| 欧美一区二区福利视频| 亚洲黄色免费网站| 日韩视频中午一区| 国产精品国产三级国产专播品爱网| 日韩高清不卡在线| 91国内精品野花午夜精品| 久久伊人中文字幕| 久久97超碰国产精品超碰| 欧美日韩国产一区二区三区地区| 国产精品美女久久久久久久久久久| 久久9热精品视频| 在线播放一区二区三区| 一区二区三区日韩精品| 99国产精品国产精品毛片| 国产人妖乱国产精品人妖| 国产精品正在播放| 久久久久久夜精品精品免费| 日本欧洲一区二区| 欧美一级久久久| 日韩成人伦理电影在线观看| 欧美精品久久久久久久多人混战| 亚洲尤物视频在线| 欧美亚洲一区三区| 亚洲自拍与偷拍| 欧美性videosxxxxx| 午夜久久久影院| 欧美久久婷婷综合色| 午夜日韩在线观看| 91精品国产高清一区二区三区| 亚洲成人第一页| 欧美另类z0zxhd电影| 日本va欧美va精品| 欧美mv日韩mv国产| 国产精品一区免费视频| 欧美国产精品专区| 99麻豆久久久国产精品免费优播| 国产精品久久久久久户外露出| av综合在线播放| 亚洲日本电影在线| 欧美日韩视频在线观看一区二区三区 | 成人av集中营| 一区在线观看视频| 91激情五月电影| 亚洲成人免费在线观看| 3d成人h动漫网站入口| 麻豆国产欧美一区二区三区| 久久久国产精华| 色婷婷精品大视频在线蜜桃视频 | 国产激情视频一区二区三区欧美 | 久久久久久黄色| 成人国产免费视频| 一区二区三区四区av| 欧美日韩一区二区欧美激情 | 欧美激情中文不卡| 91免费在线视频观看| 亚洲成人免费看| 久久影音资源网| 色婷婷综合中文久久一本| 天天av天天翘天天综合网色鬼国产| 日韩欧美一卡二卡| 99精品1区2区| 日本女优在线视频一区二区 | 91麻豆精品国产91久久久资源速度 | 久久精品国产精品亚洲综合| 日本一区二区三区电影| 欧美综合视频在线观看| 奇米影视7777精品一区二区| 国产欧美日韩在线视频| 欧美日韩成人在线| 久久青草国产手机看片福利盒子| av电影一区二区| 三级影片在线观看欧美日韩一区二区| 久久久蜜桃精品| 欧美日韩中文国产| 成人免费观看视频| 日韩精品一级二级| 亚洲猫色日本管| 久久久久久久久免费| 欧美日韩成人在线一区| www.66久久| 国产米奇在线777精品观看| 亚洲国产wwwccc36天堂| 国产亚洲精品bt天堂精选| 91精品中文字幕一区二区三区| 成人免费看黄yyy456| 久久精品国产久精国产| 亚洲1区2区3区4区| 亚洲免费伊人电影| 国产欧美一区二区三区网站 | 亚洲激情自拍视频| 中文字幕的久久| 精品国产1区2区3区| 欧美浪妇xxxx高跟鞋交| 在线免费观看日本欧美| av电影在线观看不卡| 国产精品一区二区视频| 久久精品国产99国产精品| 99精品视频在线免费观看| 国产大片一区二区| 精品亚洲成a人| 日本午夜精品视频在线观看 | 欧美日韩国产欧美日美国产精品| 91在线精品秘密一区二区| 丁香另类激情小说| 国产一区二区三区日韩| 国产在线不卡一区| 国内精品久久久久影院色| 奇米影视一区二区三区小说| 日韩va欧美va亚洲va久久| 日韩电影免费一区| 日本美女一区二区| 日本v片在线高清不卡在线观看| 亚洲国产一区视频| 视频一区国产视频| 欧美aaaaa成人免费观看视频| 在线影院国内精品| 色婷婷av久久久久久久| 91黄视频在线观看| 欧美精品aⅴ在线视频| 777xxx欧美| 精品国产髙清在线看国产毛片 | 麻豆精品在线观看| 毛片av中文字幕一区二区| 国产资源精品在线观看| 国产91色综合久久免费分享| 成人免费三级在线| 色乱码一区二区三区88| 欧美日高清视频| 精品福利一区二区三区| 国产欧美精品区一区二区三区 | 久久精品视频免费| 亚洲欧洲色图综合| 午夜精品aaa| 久久电影网电视剧免费观看| 成人亚洲精品久久久久软件| 91久久人澡人人添人人爽欧美| 欧美福利视频一区| 国产亚洲婷婷免费| 一区二区三区中文字幕精品精品| 日日夜夜一区二区| 国产麻豆精品视频| 在线观看av一区二区| 日韩精品一区二区在线| 亚洲欧美在线视频观看| 美女视频免费一区| 99久久综合精品| 欧美一级黄色大片| 亚洲日本成人在线观看| 精品影院一区二区久久久| aaa国产一区| 欧美电影免费观看高清完整版在| 国产精品国产三级国产aⅴ原创 | 三级精品在线观看| 成人亚洲一区二区一| 欧美日韩一区在线| 中文字幕精品—区二区四季| 午夜精品久久久久久久久久| 成人aaaa免费全部观看| 日韩欧美一二区| 亚洲黄色性网站| 国产成人综合网站| 日韩一区二区在线播放| 亚洲色图欧洲色图婷婷| 国模无码大尺度一区二区三区| 91国内精品野花午夜精品| 国产日韩欧美a| 另类调教123区 | 不卡区在线中文字幕| 91精品国产一区二区三区| 亚洲视频一二区| 国产剧情一区二区三区| 日韩三级电影网址| gogo大胆日本视频一区| 欧美变态凌虐bdsm| 日韩成人免费在线| 欧美视频一区在线观看| 亚洲欧美视频在线观看视频| 大尺度一区二区| 精品对白一区国产伦| 日韩精品一级二级 | 国产精品一二三在| 日韩视频在线永久播放| 亚洲123区在线观看| 色视频欧美一区二区三区| 中文字幕在线观看不卡视频| 国产超碰在线一区| 国产精品少妇自拍| 成人av先锋影音| 中文字幕免费不卡在线| 国产精品1024久久|