在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            K9F5608程序

            作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
            最近使用K9F5608做個(gè)項(xiàng)目,用到大容量的存貯器,寫(xiě)了對(duì)K9F的操作程序,但是因?yàn)槠涫荖AND FLASH,出廠時(shí)會(huì)有一定的壞塊,在主程序中,只用到了在擦除塊中檢測(cè)狀態(tài),如果狀態(tài)不對(duì),則不用此塊,這種辦法,一直感覺(jué)不是很好,現(xiàn)在對(duì)FLASH的YAFFS文件系統(tǒng),還沒(méi)有看明白,因此如果有機(jī)會(huì)希望和大家交流,對(duì)于數(shù)據(jù)采集系統(tǒng)的大容量存貯的實(shí)現(xiàn)。

            下面是我寫(xiě)的一些程序。

            本文引用地址:http://www.biyoush.com/article/201611/316608.htm

            注意一個(gè)問(wèn)題:如果用51單片機(jī)的話,在做硬件時(shí),不要把K9F的CE片選腳用51的片外尋址來(lái)統(tǒng)一尋址,這樣在寫(xiě)數(shù)據(jù)的時(shí)候是不對(duì)的,因?yàn)樾酒笤诘却齼?nèi)部操作時(shí)要求CE為低,而這是51統(tǒng)一尋址辦不到的,所以CE要單獨(dú)的一個(gè)引腳用來(lái)控制。這是要注意的,別的按統(tǒng)一尋址操作就可以。

            /*
            *********************************************************************************************************
            * NOTE:The programme of send data to the FLASH.
            *
            * (c) Copyright ************Electronic Co.,Ltd
            * All Rights Reserved
            *
            *
            *
            * File : K9FData.c
            * By :david4383 @163.com

            * Data : 2007.08.07
            * Version : V0.1
            *********************************************************************************************************
            */
            /*本文件2007.08.24日調(diào)試完成*/
            #include "cygnal.h"
            #include "macro.h"
            #include "common.h"
            #include
            #include "variable.h"
            #include "function.h"
            sbit KRB =P0^4;
            extern void delay(unint i);

            volatile unchar xdata K9FADD _at_ 0x3000;

            /*
            -------------------------------------------------------------------------------------------
            輸 入:編程的數(shù)據(jù)開(kāi)始地址,數(shù)據(jù)讀出的間接地址.
            輸 出:返回編程是否正確.
            功 能:可以編一頁(yè)的空間.最大地址在528.
            -------------------------------------------------------------------------------------------
            */
            unchar K9FProgramData(unchar columndata, /* */
            unchar pageh, /* */
            unchar pagel, /* */
            volatile unchar xdata *xramadd) /* */
            {
            unint i;

            K9FCELOW;

            K9FWriteComm(K9FWRITECOMMAND); //0x80

            K9FWriteAdd(columndata,pageh,pagel);


            for (i=columndata ; i<512 ; i++)
            {
            K9FADD=*xramadd;
            xramadd++;
            }

            K9FWriteComm(K9FENDPROGRAMFLASH); //發(fā)送0x10;

            K9FDetectBusy();

            K9FCEHIGH;

            if(K9FStatusRead())
            {

            return TRUE;
            }
            else
            {
            return FALSE;
            }

            }
            /*
            -------------------------------------------------------------------------------------------
            輸入:編程的字節(jié)個(gè)數(shù),頁(yè)開(kāi)始地址,塊高,塊低,編程的數(shù)據(jù)存貯器.
            輸出:編程是否成功.
            功能:程序要編程n個(gè)字節(jié),也不是頁(yè)體.
            -------------------------------------------------------------------------------------------
            */
            unchar K9FProgramNData(unchar n,/*編程字節(jié)個(gè)數(shù) */
            unchar columndata, /*頁(yè)開(kāi)始地址 */
            unchar pageh, /*塊地址高 */
            unchar pagel, /*塊地址低 */
            volatile unchar xdata *xramadd) /*編程數(shù)據(jù)存貯器*/
            {
            unint i;
            i=0;
            K9FCELOW;

            K9FWriteComm(K9FWRITECOMMAND); //0x80

            K9FWriteAdd(columndata,pageh,pagel);

            while (i{
            K9FADD=*xramadd;
            xramadd++;
            i++;
            }

            K9FWriteComm(K9FENDPROGRAMFLASH); //發(fā)送0x10;

            K9FDetectBusy();

            K9FCEHIGH;

            if(K9FStatusRead())
            {

            return TRUE;
            }
            else
            {
            return FALSE;
            }

            }
            /*
            -------------------------------------------------------------------------------------------
            輸 入:塊A的地址,塊B的地址.
            輸 出:塊復(fù)制是否正確的標(biāo)志.
            功 能:當(dāng)一個(gè)塊檢測(cè)到錯(cuò)誤時(shí),從一個(gè)塊保存到另一個(gè)塊.
            -------------------------------------------------------------------------------------------
            */
            unchar K9FCopyBackProgramData(unchar columndataA,
            unchar pagehA,
            unchar pagelA, /*塊復(fù)制源地址 */
            unchar columndataB,
            unchar pagehB,
            unchar pagelB) /*塊復(fù)制目的地址 */
            {
            K9FCELOW;

            K9FWriteComm(0x00);

            K9FWriteAdd(columndataA,pagehA,pagelA);

            K9FDetectBusy();

            K9FWriteComm(0x8a);

            K9FWriteAdd(columndataB,pagehB,pagelB);

            K9FDetectBusy();

            K9FCEHIGH;

            if(K9FStatusRead())
            {
            return TRUE;
            }
            else
            {
            return FALSE;
            }

            }
            /*
            -------------------------------------------------------------------------------------------
            輸入:頁(yè)高地址,頁(yè)低地址,存放數(shù)據(jù)的連續(xù)空間
            輸出:坊數(shù)據(jù)是否成功
            功能:用來(lái)讀取正好一頁(yè)的內(nèi)容.
            -------------------------------------------------------------------------------------------
            */

            void K9FReadPageData(unchar pageh,
            unchar pagel,
            volatile unchar xdata *xramadd)
            {
            unint i;
            K9FCELOW;

            K9FWriteComm(K9FREADCOMMAND); //命令鎖存.

            K9FWriteAdd(0x00,pageh,pagel); //地址鎖存.

            K9FDetectBusy();

            for (i=0x00 ; i<512 ; i++)
            {
            *xramadd=K9FADD;
            xramadd++;
            }

            K9FCEHIGH;

            }

            /*
            -------------------------------------------------------------------------------------------
            輸 入:選擇塊區(qū);要讀出的頁(yè)數(shù);數(shù)據(jù)讀的開(kāi)始地址.及讀出存放的地址.
            輸 出:數(shù)據(jù)存放在指針?biāo)傅牡刂分?返回?cái)?shù)據(jù)是否讀出正確.
            功 能:可以實(shí)現(xiàn)從A,B,C任意塊開(kāi)始讀,可以讀一頁(yè)甚至多頁(yè),
            -------------------------------------------------------------------------------------------
            */
            unchar K9FReadSequenceData(unchar comm, /*選擇是A、B、還是C;暫時(shí)考慮不使用C*/
            unchar pages, /*讀出的頁(yè)數(shù) */
            unchar columndata, /*數(shù)據(jù)的開(kāi)始位置 */
            unchar pageh, /*數(shù)據(jù)開(kāi)始的高地址 */
            unchar pagel, /*數(shù)據(jù)開(kāi)始的低地址 */
            volatile unchar xdata *xramadd) /*數(shù)據(jù)存放的開(kāi)始地址 */
            {
            unint max;
            unint i;

            if (pages==0x00)
            {
            return FALSE;
            }

            if (comm==0x00)
            {
            max=528; //256+256+16;
            }
            else if (comm==0x01)
            {
            max=272; //256+16;
            }
            else if (comm==0x50)
            {
            max=16;
            }
            else
            {
            return FALSE;
            }

            K9FCELOW;

            K9FWriteComm(comm); //0x01或者0x00;

            K9FWriteComm(K9FWRITECOMMAND); //0x80;

            K9FWriteAdd(columndata,pageh,pagel);

            for (i=columndata; i{
            *xramadd=K9FADD;
            xramadd++;
            }

            K9FDetectBusy();

            pages--;
            while (pages!=0x00) //然后讀出是一整頁(yè)的數(shù)據(jù).順序存放在間接地址中.
            {
            for (i=0; i{
            *xramadd=K9FADD;
            xramadd++;
            }
            pages--; //直到要求讀的頁(yè)數(shù)為0,則停止.

            K9FDetectBusy();
            }

            K9FCEHIGH; //拉高片選.結(jié)束讀數(shù)據(jù).
            }
            /*
            -------------------------------------------------------------------------------------------
            輸 入:讀一個(gè)字節(jié)的地址
            輸 出:字節(jié)是否正確讀出.
            功 能:可以只讀一個(gè)字節(jié).也可以讀N個(gè)字節(jié),使用片選線結(jié)束繼續(xù)讀下面的數(shù)據(jù).返回為數(shù)據(jù)讀出
            是否正確.
            -------------------------------------------------------------------------------------------
            */
            unchar K9FReadNData(
            unchar comm, /*A,B,還是C? */
            unchar n, /*讀出數(shù)據(jù)的個(gè)數(shù) */
            unchar columndata, /*單個(gè)數(shù)據(jù)的開(kāi)始地址 */
            unchar pageh, /* */
            unchar pagel, /* */
            volatile unchar xdata *xramadd) /*讀出的數(shù)據(jù)存放的位置 */
            {
            unchar i;
            i=0;
            K9FCELOW; //拉低片選.
            if(comm!=0x00)
            {
            K9FWriteComm(comm);
            }
            K9FWriteComm(K9FREADCOMMAND);

            K9FWriteAdd(columndata,pageh,pagel);

            K9FDetectBusy();

            while (i {
            *xramadd=K9FADD;
            xramadd++;
            i++;
            }

            K9FCEHIGH; //拉高片選,完成讀數(shù)據(jù).
            return (TRUE);

            }
            /*
            -------------------------------------------------------------------------------------------

            -------------------------------------------------------------------------------------------
            */
            unchar K9FReadAData(unchar comm,
            unchar columndata, /*單個(gè)數(shù)據(jù)的開(kāi)始地址 */
            unchar pageh, /* */
            unchar pagel) /* */
            {
            unchar i;

            K9FCELOW; //拉低片選.
            if (comm!=0x00)
            {
            K9FWriteComm(comm);
            }
            K9FWriteComm(K9FREADCOMMAND);

            K9FWriteAdd(columndata,pageh,pagel);

            K9FDetectBusy();

            i=K9FADD;

            K9FCEHIGH; //拉高片選,完成讀數(shù)據(jù).
            return (i);

            }
            /*
            -------------------------------------------------------------------------------------------
            輸 入:void
            輸 出:廠家號(hào)碼及型號(hào)號(hào)碼.
            功 能:一個(gè)UNINT型量,讀出是否是正常的芯片碼.
            -------------------------------------------------------------------------------------------
            */
            unint K9FReadID(void)
            {
            unint a;

            K9FCELOW;

            K9FWriteComm(K9FREADIDCOMMAND);

            ALEHIGH;
            K9FADD=0x00;
            ALELOW;

            a=0x00ff&K9FADD;
            a=a*256;
            a=a|K9FADD;

            K9FCEHIGH;

            return (a);
            }
            /*
            -------------------------------------------------------------------------------------------
            輸 入:要擦除的頁(yè)高低地址.
            輸 出:返回是否擦除成功標(biāo)志.
            功 能:共有2048個(gè)塊,每個(gè)塊16K(8BIT),
            -------------------------------------------------------------------------------------------
            */
            unchar K9FEraseBlockData(unchar pageh,unchar pagel)
            {

            K9FCELOW;

            K9FWriteComm(K9FERISESETUPCOMMAND); //0x60 擦除命令.

            ALEHIGH;
            K9FADD=pagel; //地址,先送低,再送高.
            K9FADD=pageh;
            ALELOW;

            K9FWriteComm(K9FERISECOMMAND); //0xd0;

            K9FDetectBusy();

            K9FCEHIGH;

            if(K9FStatusRead())
            {
            return TRUE;
            }
            else
            {
            return FALSE;
            }
            }
            /*
            -------------------------------------------------------------------------------------------
            輸 入:void
            返 回:讀狀態(tài)是否正常,為1正常.
            實(shí)現(xiàn)功能:讀寫(xiě)操作完成后,芯片是否正常完成操作.
            -------------------------------------------------------------------------------------------
            */
            unchar K9FStatusRead(void)
            {
            unchar rdata;

            K9FCELOW;

            K9FWriteComm(K9FSTATUSCOMMAND); //0x70

            rdata=K9FADD; //讀數(shù)據(jù).

            K9FCEHIGH;

            if((rdata&0x01)==0x00) //編程是不是正確.
            {
            return TRUE; //
            }
            else
            {
            return FALSE;
            }
            }
            /*
            -------------------------------------------------------------------------------------------
            輸 入:數(shù)據(jù)寫(xiě)入的開(kāi)始地址,頁(yè)的高低字節(jié).
            輸 出:void
            功 能:給芯片發(fā)送等待操作的地址.
            -------------------------------------------------------------------------------------------
            */
            void K9FWriteAdd(unchar columndata,unchar pageh,unchar pagel)
            {
            ALEHIGH; /*數(shù)據(jù)開(kāi)始地址*/ /*頁(yè)高*/ /*頁(yè)低*/
            K9FADD=columndata;
            K9FADD=pagel;
            K9FADD=pageh;
            ALELOW;
            }
            /*
            -------------------------------------------------------------------------------------------
            輸 入:寫(xiě)入芯片的指令.
            輸 出:void
            功 能:給芯片發(fā)送命令指令.
            -------------------------------------------------------------------------------------------
            */
            void K9FWriteComm(unchar command)
            {
            CLEHIGH;
            K9FADD=command;
            CLELOW;
            }
            /*
            -------------------------------------------------------------------------------------------
            輸 入:void
            輸 出:void
            功 能:在不正常的情況下可以使芯片復(fù)位
            -------------------------------------------------------------------------------------------
            */
            void K9FReset(void)
            {
            K9FCELOW;

            K9FWriteComm(0xff); //0xff為復(fù)位命令

            K9FDetectBusy();

            K9FCEHIGH;
            }
            void K9FDetectBusy(void)
            {
            KRB=1;
            while (!KRB);
            }



            關(guān)鍵詞: K9F5608程序統(tǒng)一尋

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉