0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

初始化高速TINI系統(tǒng)

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-01-11 09:44 ? 次閱讀

在DS80C400之前,TINI?系統(tǒng)被限制在最大40MHz下運(yùn)行,受到DS80C390處理器最高速度的限制。DS80C400承諾提供75MHz的信號(hào),因此在TINI固件中增加了支持,使系統(tǒng)能夠以允許的最快晶體倍增器運(yùn)行。然而,為了使系統(tǒng)經(jīng)濟(jì)實(shí)惠,TINI參考設(shè)計(jì)(TINIm400和TINIs400)并非設(shè)計(jì)用于在這些高速下運(yùn)行。許多開發(fā)人員嘗試在 x4 晶體乘數(shù)設(shè)置下運(yùn)行他們的 TINI,每個(gè)人都最終注意到他們的 TINI 只是停止了。原因不是DS80C400處理器不能支持這個(gè)速度,而是閃存不能支持這個(gè)速度。因此,高速TINI系統(tǒng)需要一個(gè)帶有RAM的定制板,用于固件存儲(chǔ)和執(zhí)行。本應(yīng)用筆記將討論如何初始化這種高速TINI系統(tǒng)。

閃存限制

閃光通常是高速TINI設(shè)計(jì)中的限制因素。最好的商用閃光燈的訪問時(shí)間為55ns。下圖顯示了這與DS80C400 CPU速度和AM29LV081閃存的關(guān)系。

額定閃光速度 最大中央處理器速度
55ns 40兆赫
70ns 33兆赫
90ns 27.5兆赫
120ns 21兆赫
150ns 17兆赫

此處提供的數(shù)據(jù)留給開發(fā)人員一個(gè)選擇:用完閃存并限制為 40MHz 執(zhí)行速度,或者從 RAM 中執(zhí)行并運(yùn)行高達(dá) 75MHz。為了實(shí)現(xiàn)使用DS80C400和TINI OS的高速設(shè)計(jì),必須改變正常的TINI存儲(chǔ)器映射(如TINIm400)。

天宇操作系統(tǒng)內(nèi)存要求

要在DS80C400上運(yùn)行TINI Java?運(yùn)行時(shí)(TINI OS),CE0(地址0)上必須至少有512K RAM,CE2(地址400000h)上必須有另外512K的代碼空間。在TINIm400上,代碼空間以閃存的形式實(shí)現(xiàn),但它可以很容易地實(shí)現(xiàn)為RAM。

應(yīng)用程序代碼的 RAM 的問題在于它最初是空白的,如果電源斷開、電池耗盡或某些其他外部事件擦除其內(nèi)容,則會(huì)擦除它。TINI應(yīng)用程序通常用于遠(yuǎn)程監(jiān)測(cè)和控制,如果設(shè)備丟失其代碼,現(xiàn)場(chǎng)更新將非常不方便。解決方案是從位于正常 TINI 內(nèi)存映射之外的閃存將應(yīng)用程序的映像復(fù)制到 RAM 中。

備用內(nèi)存映射

考慮以下高速 TINI 的內(nèi)存映射。

poYBAGO-FIyALTrUAABhWEZtep8681.gif


圖1.高速 TINI 系統(tǒng)的可能內(nèi)存映射。

此內(nèi)存映射在 TINI OS 所需的位置顯示兩個(gè) 512K RAM(一個(gè)位于地址 0,一個(gè)位于地址 400000h)。它還在地址 600000h 處包含一個(gè)額外的閃存。此閃存包含一個(gè)初始化應(yīng)用程序,該應(yīng)用程序負(fù)責(zé):

初始化堆

將固件和應(yīng)用程序映像復(fù)制到地址 400000h

將控制權(quán)移交給TINIOS

當(dāng) DS80C400 引導(dǎo)加載程序啟動(dòng)時(shí),它會(huì)從內(nèi)存頂部啟動(dòng)并搜索要運(yùn)行的可執(zhí)行文件。當(dāng)它找到有效的 TINI 應(yīng)用程序簽名時(shí),它會(huì)將控制權(quán)轉(zhuǎn)移到該地址。我們將啟動(dòng)代碼放在地址 6F0000h 處,確保它是找到的第一個(gè)應(yīng)用程序代碼。有效的 TINI 簽名由 64K 內(nèi)存庫(kù)地址 0 處的以下結(jié)構(gòu)組成:

SJMP 聲明 字符串“TINI” 銀行號(hào)碼(或 0)
2 字節(jié) 4 字節(jié) 1 字節(jié)

參見DS80C400數(shù)據(jù)資料中的“查找用戶代碼”部分2有關(guān)此過程的更多信息。

使固件運(yùn)行得更快

現(xiàn)在我們已經(jīng)設(shè)計(jì)了定制的TINI硬件,我們需要更改固件以更快的速度運(yùn)行。

TINI軟件開發(fā)套件附帶的TINI固件經(jīng)過預(yù)編程,可在14MHz晶體上以晶體乘法器2運(yùn)行。高速TINI系統(tǒng)通常在14MHz或18MHz晶體上以2或4的倍數(shù)運(yùn)行??梢允褂肨BINFixer工具針對(duì)不同的晶體速度和乘法器更改TINI固件。運(yùn)行此應(yīng)用程序,不帶參數(shù)以查看命令行選項(xiàng)。通常,只需要更改晶體乘數(shù)(-m 選項(xiàng))和晶體值(-c 選項(xiàng))。使用 TINI SDK 中的文件 tini400.tbin 作為此應(yīng)用程序的輸入文件。

啟動(dòng)應(yīng)用程序

隨著固件更改為以更快的晶體乘法器運(yùn)行,我們現(xiàn)在可以將注意力轉(zhuǎn)向初始化 TINI 系統(tǒng)以在 RAM 外執(zhí)行的程序。這里介紹的典型啟動(dòng)應(yīng)用程序是用匯編編寫的,并使用 TINI 軟件開發(fā)工具包附帶的免費(fèi)工具(宏和 a390)構(gòu)建。

對(duì)于此啟動(dòng)應(yīng)用程序,我們選擇將TINI固件和Slush應(yīng)用程序存儲(chǔ)為TBIN3閃存中的文件。因此,我們的啟動(dòng)應(yīng)用程序?qū)⑿枰幚?TBIN 文件格式的解析。這樣做的好處是TBIN格式存儲(chǔ)其數(shù)據(jù)的所有地址信息,使啟動(dòng)應(yīng)用程序具有更通用的用途。

文件 init.a514顯示一個(gè)初始化應(yīng)用程序,該應(yīng)用程序讀取存儲(chǔ)在閃存中的一些TBIN文件并將其復(fù)制到RAM,然后將執(zhí)行傳輸?shù)絉AM。該代碼是通用的,盡管三個(gè)位置可能需要針對(duì)不同的內(nèi)存配置進(jìn)行一些調(diào)整:

TBIN_GLOB_ADDRESS equ 600000h
這是存儲(chǔ) TBIN 文件的地址。駐留在此處的映像應(yīng)使用 BuildTBIN 應(yīng)用程序生成(請(qǐng)參閱下一部分)。

EXECUTE_ADDRESS equ 400000h 對(duì)于 TINI Java 運(yùn)行時(shí),此地址應(yīng)保持 400000h
(對(duì)于用 C 編寫的應(yīng)用程序,它可以更改)。初始化應(yīng)用程序完成后,將執(zhí)行到此位置的 LJMP 以轉(zhuǎn)移應(yīng)用程序控制權(quán)。

org 6F0000h
應(yīng)用程序的 org 語(yǔ)句指定代碼的位置。

使用初始化應(yīng)用程序的默認(rèn)配置,存儲(chǔ)在地址 600000h 的 TBIN 文件將被復(fù)制到 RAM 中(在 TBIN 文件本身中指定的地址處)。復(fù)制后,程序執(zhí)行將轉(zhuǎn)移到地址400000h。

開發(fā)人員應(yīng)考慮當(dāng)前 init 代碼中的幾個(gè)問題:

串行調(diào)試:初始化應(yīng)用程序配置計(jì)時(shí)器 2 以生成串行端口 0 的波特率。(該應(yīng)用程序包含一些用于調(diào)整波特率的等價(jià)物。它輸出有關(guān)正在復(fù)制到RAM的每個(gè)TBIN記錄的信息??梢詣h除所有串行例程,而不會(huì)影響 init 代碼的功能。

展開的副本:函數(shù) Copy256 包含一個(gè)部分展開的 256 字節(jié)副本(展開為 16 個(gè)循環(huán),每個(gè)循環(huán) 16 個(gè)單字節(jié)副本)。這對(duì)性能有好處,但會(huì)增加代碼大小。如果代碼大小比啟動(dòng)延遲更重要,那么這是首先查看的好地方。

POR 檢查:初始化代碼在復(fù)制 TINI 固件和應(yīng)用程序之前不會(huì)檢查 POR。但是,如果 TINI 應(yīng)用程序故意復(fù)位而不循環(huán)電源,則可能需要這樣做。在這種情況下,應(yīng)用程序可以跳過復(fù)制并直接執(zhí)行代碼。請(qǐng)注意,建議區(qū)分有意和無意的監(jiān)視器重置。無意的看門狗重置可能意味著 TINI 功能不正常,在這種情況下,重新加載應(yīng)用程序代碼值得考慮。

RAM 擦除:?jiǎn)?dòng)代碼還會(huì)擦除前 64 KB 的 RAM,以確保系統(tǒng)干凈啟動(dòng)。如果 CE0 上的 RAM 是電池供電的,則可以刪除此操作。之所以包含此啟動(dòng)代碼,是因?yàn)樵谕姇r(shí),許多 TINI 系統(tǒng)假定文件系統(tǒng)需要重新初始化。

宏(宏預(yù)處理器)和 a390(匯編器)用于構(gòu)建啟動(dòng)代碼,使用以下命令: 生成的文件稱為 init.tbin,應(yīng)與 BuildTBIN 應(yīng)用程序的輸出一起加載到 TINI 系統(tǒng)上,詳見下一節(jié)。 macro init.a51 a390 -l -Ftbin -d -p 400 init.mpp

構(gòu)建TBIN應(yīng)用程序

BuildTBIN 應(yīng)用程序是一個(gè) Java 應(yīng)用程序,它采用一個(gè)或多個(gè) TBIN 文件并將它們格式化為一個(gè)文件,可由上一節(jié)中介紹的啟動(dòng)應(yīng)用程序使用。由于我們的高速應(yīng)用程序會(huì)將 Slush 和 TINI 固件從地址 600000h 復(fù)制到其正確位置,因此 BuildTBIN 的命令行如下所示:

java BuildTBIN 600000h file_to_load.tbin slush400.tbin tini400.tbin 在這種情況下,文件 slush400.tbin 和 tini400.tbin 將合并為文件file_to_load.tbin,該文件將針對(duì)地址 600000h。文件 file_to_load.tbin 應(yīng)與文件 init.tbin 一起加載到 TINI 系統(tǒng)上。

BuildTBIN 應(yīng)用程序獲取輸入的 TBIN 圖像并將其視為二進(jìn)制數(shù)據(jù),并將其重新包裝到另一個(gè)針對(duì)不同地址的 TBIN 文件中。有一個(gè)復(fù)雜因素:?jiǎn)?dòng)應(yīng)用程序需要知道包含多少TBIN記錄。對(duì)于JavaKit和MTK等加載程序來說,這不是問題,它們會(huì)尋找EOF(文件結(jié)尾)來確定何時(shí)不再有TBIN記錄。為了解決此問題,輸出 TBIN 文件的第一個(gè)字節(jié)包括文件中 TBIN 記錄數(shù)的計(jì)數(shù)。由于 TBIN 文件可以包含多個(gè) TBIN 記錄,因此 BuildTBIN 應(yīng)用程序必須分析每個(gè)輸入 TBIN 文件以計(jì)算它包含的記錄數(shù)。

pYYBAGO-FIyAI1yqAACu8tHSYRE438.gif


圖2.BuildTBIN 程序接受輸入的 TBIN 文件,添加一個(gè)“計(jì)數(shù)”字節(jié),將整個(gè)內(nèi)容視為二進(jìn)制流,并輸出一個(gè)新的 TBIN 格式文件。由于每個(gè) TBIN 記錄都包含一些開銷,請(qǐng)注意,輸出文件最多可以包含 9 個(gè) TBIN 記錄,盡管輸入文件僅包含 8 個(gè)。

TBIN文件格式描述于:http://files.dalsemi.com/tini/ ds80c400/c_libraries/tbinformat.html。BuildTBIN 工具的源代碼可在 http://files.dalsemi.com/tini/ds80c400/tools/buildtbin 中找到。

如果您還想在最終的 TBIN 映像中包含非 TBIN 數(shù)據(jù),則可以使用 Bin2TBIN 工具將任何二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為 TBIN 格式。此工具的來源可在以下網(wǎng)址獲得:http://files.dalsemi.com/tini/ds80c400/tools/bin2tbin。

結(jié)論

這里介紹的初始化高速TINI系統(tǒng)的方法就是許多可能的解決方案之一。本文及其隨附的代碼既是解決方案,也是解決問題的教育。通過增加一點(diǎn)RAM和閃存,可以實(shí)現(xiàn)穩(wěn)定、高速的TINI,以充分利用DS80C400處理器的功能。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19103

    瀏覽量

    228825
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10807

    瀏覽量

    210852
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6689

    瀏覽量

    123141
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    xilinx zynq RapidIO系統(tǒng)初始化啟動(dòng)過程概述

    系統(tǒng)初始化之后,所有器件都會(huì)擁有一個(gè)ID,在系統(tǒng)初始化之前,按照下面設(shè)置。RapidIO系統(tǒng)應(yīng)該只有一個(gè)引導(dǎo)代碼器件。
    的頭像 發(fā)表于 12-26 11:22 ?3964次閱讀
    xilinx zynq RapidIO<b class='flag-5'>系統(tǒng)</b>的<b class='flag-5'>初始化</b>啟動(dòng)過程概述

    RT-Thread自動(dòng)初始化詳解

    初始化函數(shù)不需要被顯式調(diào)用,只需要在函數(shù)定義處通過宏定義的方式進(jìn)行申明,就會(huì)在系統(tǒng)啟動(dòng)過程中被執(zhí)行,非常的方便。 1 普通初始化 前面也講了,我們?cè)趯憜纹瑱C(jī)的程序時(shí),需要對(duì)硬件進(jìn)行初始化
    的頭像 發(fā)表于 06-25 21:38 ?1.1w次閱讀
    RT-Thread自動(dòng)<b class='flag-5'>初始化</b>詳解

    自動(dòng)初始化機(jī)制原理詳解

    自動(dòng)初始化機(jī)制是指初始化函數(shù)不需要被顯式調(diào)用,只需要在函數(shù)定義處通過宏定義的方式進(jìn)行申明,就會(huì)在系統(tǒng)啟動(dòng)過程中被執(zhí)行。這篇文章就來探索一下其中的奧秘, 簡(jiǎn)單理解其原理!
    的頭像 發(fā)表于 12-16 09:33 ?948次閱讀
    自動(dòng)<b class='flag-5'>初始化</b>機(jī)制原理詳解

    手機(jī)模塊初始化向?qū)?/a>

    手機(jī)模塊初始化向?qū)?為了剛好的對(duì)手機(jī)模塊進(jìn)行初始化,所以把最基本的向?qū)懴聛?本向?qū)нm用于本公司的西門子TC35I和華為GT9000模塊。一、在初始化手機(jī)模塊前,請(qǐng)先確定DT
    發(fā)表于 09-18 09:41 ?17次下載

    LINUX系統(tǒng)引導(dǎo)和初始化-LINUX內(nèi)核解讀

    Linux 的系統(tǒng)引導(dǎo)和初始化 ----------Linux2.4.22內(nèi)核解讀之一 一、 系統(tǒng)引導(dǎo)和初始化概述 相關(guān)代碼(引導(dǎo)扇區(qū)的程序及其輔助程序,以 x86體系為例): \li
    發(fā)表于 11-03 22:31 ?53次下載

    RDA1846S初始化設(shè)置

    RDA1846S初始化設(shè)置RDA1846S初始化設(shè)置RDA1846S初始化設(shè)置
    發(fā)表于 01-15 17:08 ?0次下載

    UCOS_III_配置與初始化

    UCOS_III_配置與初始化
    發(fā)表于 12-20 22:53 ?5次下載

    HX711初始化程序

    這是HX711的初始化程序
    發(fā)表于 02-08 01:51 ?89次下載

    ds1302時(shí)鐘芯片初始化,自動(dòng)決定DS1302是否需要初始化程序

    ds1302芯片時(shí)鐘芯片大家都在問到底需要不需要初始化?這篇文章將會(huì)給大家一個(gè)程序,可以自動(dòng)決定DS1302是否需要初始化。
    發(fā)表于 10-19 19:19 ?8454次閱讀

    SEED-DEC2812初始化函數(shù)說明

    SEED-DEC2812系統(tǒng)初始化函數(shù)。
    發(fā)表于 04-13 09:05 ?11次下載
    SEED-DEC2812<b class='flag-5'>初始化</b>函數(shù)說明

    8253初始化程序分享_8253應(yīng)用案例

    本文首先介紹了8253概念及8253各通道的工作方式,其次詳細(xì)介紹了8253初始化要求及編程,最后用一個(gè)例子介紹了8253的初始化程序。
    發(fā)表于 05-23 15:52 ?2.2w次閱讀
    8253<b class='flag-5'>初始化</b>程序分享_8253應(yīng)用案例

    在51平臺(tái)下初始化文件的引入導(dǎo)致全局變量無法初始化的問題如何解決

    本文檔的主要內(nèi)容詳細(xì)介紹的是在51平臺(tái)下初始化文件的引入導(dǎo)致全局變量無法初始化的問題如何解決。
    發(fā)表于 08-20 17:31 ?0次下載
    在51平臺(tái)下<b class='flag-5'>初始化</b>文件的引入導(dǎo)致全局變量無法<b class='flag-5'>初始化</b>的問題如何解決

    霍爾無刷電機(jī)如何進(jìn)行程序初始化?

    霍爾無刷電機(jī)這種系統(tǒng)在進(jìn)行程序初始化已經(jīng)預(yù)先設(shè)定好一些變量,因此隨著系統(tǒng)初始化進(jìn)行,這些變量也開始進(jìn)入了初始化過程中,而且這個(gè)過程中也設(shè)計(jì)
    的頭像 發(fā)表于 10-15 17:29 ?7640次閱讀

    C++之初始化列表學(xué)習(xí)的總結(jié)

    類中可以使用初始化列表對(duì)成員進(jìn)行初始化。
    的頭像 發(fā)表于 12-24 17:39 ?811次閱讀

    Armlinux內(nèi)核移植及系統(tǒng)初始化過程分析

    Armlinux內(nèi)核移植及系統(tǒng)初始化過程分析說明。
    發(fā)表于 04-06 15:53 ?11次下載