<ol id="glfvi"></ol>

    <fieldset id="glfvi"></fieldset>

    1. <mark id="glfvi"></mark>
        <var id="glfvi"></var>

        <big id="glfvi"></big>

        天堂8在线天堂资源BT_一区二区在线 | 国_天堂SV在线最新版在线_97在线观看视频_欧美成人影院在线观看

        機(jī)電之家資源網(wǎng)
        單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
        培訓(xùn)信息
        贊助商
        SST89C54/58簡介
        SST89C54/58簡介
         更新時(shí)間:2008-7-26 20:37:34  點(diǎn)擊數(shù):5
        【字體: 字體顏色

        一. SST89C54/58性能簡介
        二. SST89C54/58功能圖
        兼容于INTEL公司的P87C54/58 , 擴(kuò)展了IAP及4K E2PROM。

        三. SST89C54/58程序空間
        在動態(tài)修改Block0程序的問題上,應(yīng)當(dāng)確保將要加載的程序正確無誤,至少做到進(jìn)入Block1塊入口程序的正確性,否則就只有借助編程器來燒錄自舉程序了。但這樣就失去IAP的意義,不可不察。
        在本公司的LOG2001 USB DEMO KIT開發(fā)系統(tǒng)上,需要完全更新Block0塊的內(nèi)容,讓用戶真實(shí)擁有P87C54/58的全部功能。這樣,當(dāng)用戶在開發(fā)USB時(shí),就不需要用定位器或者匯編語言來混合編程。只需象平時(shí)那樣操作自己熟悉的C51開發(fā)環(huán)境。
        LOG2001 USB DEMO KIT開發(fā)系統(tǒng)使用UART來傳送Firmware,其默認(rèn)Buadrate為9600bps。除了確保自舉程序入口正常以外,串口的Buadrate在當(dāng)次也要相符。改動Buadrate只有在裝載成功以后才有效。
        一般來說,在完全掌握IAP及232口以前,而身邊又缺乏編程器的情況下,應(yīng)謹(jǐn)慎對待與之相關(guān)的程序語句。在本公司的LOG2001 USB DEMO KIT開發(fā)系統(tǒng)上,還預(yù)備有最后一種自舉能力:硬件自舉! 

        四. IAP編程模式

        SST89C54/58除了提供IAP編程模式以外,也可以借助外力(如編程器)強(qiáng)行將程序灌入,就象寫Flash ROM一樣。其實(shí)自舉程序就唯有通過這種方式載入。稱之為“外主編程模式”。
        外主編程模式對于大多數(shù)程序員而言意義不大,有興趣的話參閱SST89C54/58的 Datesheet,下面介紹IAP模式。
        IAP模式就是CPU一邊在某個Block 中運(yùn)行,同時(shí)對另一個Block進(jìn)行擦空,寫入,校驗(yàn)等操作。注意,同一個Block內(nèi)不允許Program。被Program的Block整個兒處于“忙”狀態(tài),其代碼不可見。
        IAP命令見下表:(略)
        與此相關(guān)的特殊功能寄存器定義如下:
        1.SFST
        其中,SECDx為加密表,不同的加密級別將決定被加密單位對外的透明度,具體見下表:
        2.SFCF
        3.SFCM
        4.SFDT
        5.SFAL
        6.SFAH

        IAP程序設(shè)計(jì):
        對照上述介紹,很容易編寫出IAP燒錄函數(shù),下面給出幾個事例:
        1. 塊擦除:
        void block_erase (unsigned char block)
        {
        unsigned int timeout = 0xA555;
        SFCF = 0xC0; 
        SFAH = block; 
        SFDT = 0x55;
        SFCM = 0x0D;

        while (--timeout){
        if (Busy = = 0)
        return;
        }
        }
        2. 字節(jié)編程:
        void byte_program (unsigned char laddr,unsigned char haddr,unsigned char udata)
        {
        unsigned char timeout = 0xFF;
        SFCF = 0xC0;
        SFAH = haddr; 
        SFAL = laddr;
        SFDT = udata;
        SFCM = 0x0E;

        while (--timeout){
        if ( Busy = = 0)
        return;
        }
        }
        對于只需要Download Firmware來說,上述兩個函數(shù)已經(jīng)夠用。完整的IAP匯編子程序請參閱:http://www.ssti.com/
        采用C語言編寫IAP函數(shù)需要一定的技巧,它關(guān)系到定位并訪問絕對地址等問題,而且這些函數(shù)只是應(yīng)用系統(tǒng)中的一小部分,雖然嵌匯編或者純匯編更便于處理絕對地址,但卻不利于整個大系統(tǒng),有點(diǎn)丟西瓜的味道。
        LOG2001 USB DEMO KIT開發(fā)系統(tǒng)的自舉程序使用純C語言編寫,而且也適用于低價(jià)位的SST89F54/58(和Philips的價(jià)位比大概二比一吧)。
        如何拿IAP來當(dāng)I2C使用,以便節(jié)省24LCxx或93Cxx呢。Sector的概念在這里尤為重要,因?yàn)楦膭訑?shù)據(jù)不能影響程序,故而要求在小范圍內(nèi)操作。下面是關(guān)于Sector的函數(shù):
        void sector_erase (unsigned int sector)
        {
        unsigned int timeout = 0xA555;
        SFCF = 0xC0; 
        SFAH = sector /256; 
        SFAL = sector; 
        SFCM = 0x0B;

        while (--timeout){
        if (Busy == 0)
        return;
        }
        }
        如果僅僅要修改某一兩個Byte,可將該Sector內(nèi)的數(shù)據(jù)全部保存于RAM中,改好后再全部回送Sector。
        一般來說,數(shù)據(jù)Sector應(yīng)設(shè)置在Block1的高端,這樣才不會和CODE競爭。

        五. SST89C54/58發(fā)展系統(tǒng)

        前面說過,SST89C54/58兼容于INTEL的P87C54/58,故而其編譯環(huán)境毋須作大的改動,如果不打算使用IAP功能,干脆一點(diǎn)也不改。
        擴(kuò)展IAP功能,對于匯編語言來說,只是在源文件開頭用EQU或DATA偽指令定義那六個新增加的SFR地址即可。而C語言也同樣在頭文件中增加定義的SFR地址。本公司網(wǎng)站(www.usb11.com)上有SST89C58.h供Download。可將其直接替代<<reg51.h>>。
        因?yàn)槭荌AP,仿真器不太重要,其實(shí)目前也沒有專門針對SST89C54/58的仿真器。即便有也沒市場,IAP應(yīng)用最多的地方也就是當(dāng)仿真器!

        六. IAP應(yīng)用場合

        第一,IAP很方便,在網(wǎng)絡(luò)高速發(fā)展的今天,具備遠(yuǎn)程升級軟件的產(chǎn)品無疑將受到歡迎。
        第二,在編譯代碼的時(shí)候,對于稍稍多出來的一些程序代碼,可將其定位到Block1,從而避免購買更高容量的IC。
        第三,在需要保存過程數(shù)據(jù)的系統(tǒng),可將原先的外部存儲器去掉,直接拿Block1當(dāng)成外部E2PROM。此時(shí),Block1等同于24LC32,而且操作速度要比24LC32快幾十上百倍。
        第四,IAP在線軟件更新,沒有死角,包括自舉程序本身也可以重來,且毋須借助任何外力。仿真器的一大特點(diǎn)不就是編譯裝載嗎!沒錯,很多地方就拿它來當(dāng)仿真器使用。
        若要觀察程序變量,IAP的解決辦法是通過UART輸出調(diào)試信息。LOG2001 USB DEMO KIT就是采用這一調(diào)試技術(shù)。一點(diǎn)也不遜色于仿真器,特別在USB枚舉的過程中,仿真器特有的單步,中斷功能不可用,此時(shí)唯有UART可以信賴。詳情請見《USB枚舉步驟》。
        IAP當(dāng)仿真器的另一買點(diǎn)就是價(jià)廉物美,區(qū)區(qū)幾十元RMB的材料錢就可搞定。特別適合于單片機(jī)初學(xué)者。
        傳統(tǒng)的仿真器在電氣性能方面,還無法做到和應(yīng)用系統(tǒng)完全一致,這就是常見的“仿真通過,燒片不行”的毛病。IAP雖說是仿真,其實(shí)就是實(shí)際應(yīng)用,不存在電氣性能或者物理接口方面的問題。
        第五,產(chǎn)品小型化。一般地說,SMD只適合于大批量的生產(chǎn)廠家,因?yàn)镾MD測試工具也是一筆不小的投資。如果商家在出售SST89C54/58以前,預(yù)先導(dǎo)入自舉程序,則用戶拿了SMD之后,可以先裝配,再燒錄,管它大封裝,小封裝還是微封裝呢!
        關(guān)于LOG2001 USB DEMO KIT自舉程序的入口及入口參數(shù)設(shè)置,在本文附錄中給出。

        附錄
        LOG2001 USB DEMO KIT自舉程序入口參數(shù)

        下列參數(shù)要求通過UART輸入:
        1. “h”:選擇Download INTEL格式文件*。hex;
        2. “b”:選擇Download 誠通格式文件*。Rom,它和*。Hex區(qū)別是將ASIC碼轉(zhuǎn)換成bin數(shù)據(jù),并去掉“0D,0A”等控制信息。數(shù)據(jù)量壓縮一倍,節(jié)省時(shí)間;
        3. 輸入第一次“h”或者“b”之后,自舉程序?qū)⒎祷匾粋確認(rèn)符0x20(空格),如果再次肯定要改寫Firmware,第二次輸入“h”或者“b”才啟動擦除和寫入。否則不改變原來的Firmware;
        4. 輸入其它代碼,則系統(tǒng)提示錯誤后復(fù)位系統(tǒng);
        5. 自舉程序入口地址:0xF8DD,不帶任何參數(shù),只需置好Buadrate;
        下面給出入口事例函數(shù),可將其嵌入任何用戶系統(tǒng),實(shí)際上, LOG2001 USB DEMO KIT開發(fā)系統(tǒng)就是使用如下語句:
        if (RI)
        {
        switch ( _getkey() )
        {
        case 'p':
        (( void (code *)(void) ) &hard_reload[0] )();
        break;
        default:break;
        }
        } // if reload firmware
        當(dāng)然,在進(jìn)入自舉程序以前,還要設(shè)置好Buadrate等等一系列參數(shù)。自舉程序?qū)⒉捎眠@些設(shè)置而不作任何修改。
        下面是自舉程序:
        switch (_getkey())
        {
        case 'h':
        sst_send232 (' ');

        if ( _getkey() != 'h')
        goto nError;

        sst_block_erase (0x00);
        while ( read_write_hex_line (0x00) );
        break;

        case 'b':
        sst_send232 (' ');

        if ( _getkey() != 'b')
        goto nError;

        sst_block_erase (0x00);
        while ( read_write_bin_line (0x00) );
        break;

        nError: default :
        printf ("\nError!\n");
        printf ("\n'h':for (*.hex);\n");
        printf ("\n'b':for (*.rom);\n");
        (( void (code *) (void) ) &reset_0x0000 [0]) ();
        break;
        }
        Download文件最大可達(dá)32K,裝載完成之后,采用20秒鐘倒記時(shí),自動復(fù)位運(yùn)行剛剛Download的程序,毋須任何機(jī)械動作。
        由于某種原因而破壞入口函數(shù),則只有通過編程器來恢復(fù)。在燒寫入口函數(shù)的時(shí)候,請先限制DEVICER Buffer Size在0x8000之內(nèi),以免連鎖破壞自舉程序。
        為了便于調(diào)試USB及其裝載IAP不會出錯,本公司特推出“USB集成化開發(fā)環(huán)境”,它具有如下功能:
        1. USB功能調(diào)試,詳情請參閱《USB集成化開發(fā)環(huán)境》;
        2. 串口精靈,可任意設(shè)置串口參數(shù),收發(fā)單個數(shù)據(jù)或者文件,接受單片機(jī)C語言的人機(jī)信息(printf,scanf, _getkey()等等);
        3. IAP程序下載。IAP不須要任何機(jī)械動作,可以直接全面而徹底更新firmware,稍微操作不當(dāng)就會影響到自舉程序!禪SB集成化開發(fā)環(huán)境》有多重查驗(yàn)措施,用戶只需全神關(guān)心自己的源文件就是了;
        4. 自動疊加硬件自舉功能,不管用戶如何修改Firmware,即便死機(jī),或者是由于前次IAP時(shí)中途停電而造成程序飛跑,仍然可通過該功能下載程序。具體是:P2.0=P2.1à“h”à“ h”à*.hex。
        5. C51編譯(可選),建立好開發(fā)環(huán)境也是件十分重要工作,尤其是初學(xué)者

         

      1. 上一篇: STC89C51定時(shí)器2的應(yīng)用
      2. 下一篇: 內(nèi)部EEPROM 放數(shù)據(jù)STC89C58RD+ FLASH-ISP-IAP
      3. 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
        熱點(diǎn)文章
         
        推薦文章
         
        相關(guān)文章
        網(wǎng)友評論:(只顯示最新5條。)
        關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

        點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
        本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
        機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
        Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
        電話:0571-87774297 傳真:0571-87774298
        杭州濱興科技有限公司提供技術(shù)支持

        主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
        中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

        網(wǎng)站經(jīng)營許可證:浙B2-20080178-1
        黑人巨茎大战欧美白妇_一区二区在线 | 国_天堂SV在线最新版在线_97在线观看视频
          <ol id="glfvi"></ol>

          <fieldset id="glfvi"></fieldset>

          1. <mark id="glfvi"></mark>
              <var id="glfvi"></var>

              <big id="glfvi"></big>