新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > at91sam9263芯片資源與CAN驅動調試心得

        at91sam9263芯片資源與CAN驅動調試心得

        作者: 時間:2017-10-14 來源:網絡 收藏

          嵌入了一個基于200 MIPS(每秒百萬條指令)的ARM926EJ-S微控制器(MCU),從而解決了在圖形界面、數據密集型應用(比如聯網的醫療監測設備和GPS導航系統)中基于ARM9的傳統微控制器遭遇的瓶頸問題。

        本文引用地址:http://www.104case.com/article/201710/366284.htm

          采用了27條DMA(直接存儲器存取)通道,包括 18通道的PDC(外圍直接存儲器存取控制器)、一個9層的總線矩陣以及用于數據/指示TCM(緊密耦合式內存)的兩條其他的總線,以便增強CPU性能并提供高達41.6 Gbps的片上數據傳輸速率。兩個EBI(外部總線接口)支持十億字節以上的外部內存。

          人機接口。片上人機接口外圍設備包括一個相機接口、TFT/STN LCD控制器、一個6通道音頻前端接口(AC97)、I2S和一個2D圖形協處理器,該處理器可減輕CPU的畫線、區塊傳輸、多邊形填充和剪輯功能負擔。

          聯網和通信。聯網外圍設備包括一個12Mbps的USB主機和設備、10/100 Ethernet MAC(以太網媒體接入控制器)以及1 Mbps CAN(控制器局域網)。另外還有四個USART(通用同步/異步收發器)、兩個50 Mbps SPI(同步平行接口)、CompactFlash、SDIO(MCI)和一個TWI(雙線接口),該TWI能被連接到諸如GPRS調制解調器和Wi-Fi等有線和無線通信模塊上。

          外圍的DMA控制器使從外圍設備到內存的數據傳輸無需使用CPU——基于ARM9的傳統處理器通過發出裝載-存儲指示(要求至少80個CPU 周期)實現內存和外圍設備之間的一個字節的數據的傳輸。這些處理器以200 MHz(總線頻率為100 MHz)運行,即使在內存管理單元和指示/數據緩存控制器都被激活的狀態下,它們通常也會在傳輸達到約20 Mbps時達到其功能極限。

          整合了18個簡單、硅高效(silicon-efficient)、單一周期的外圍PDC、五個DMA控制器(擁有對USB主機的突發模式支持)、Ethernet MAC、相機接口、LCD 控制器、2D圖形控制器,以及一個內存到內存的DMA控制器(支持突發模式、分散聚集和鏈表)。DMA控制器徹底減輕了外部串行端口和內存之間的數據傳輸負擔。當傳輸速度為20 Mbps時,的SAM9263仍然有88%的MIPS可用于應用執行。

          11層的總線和96千字節的片上SRAM(靜態存儲器)消除了帶寬瓶頸。Atmel在AT92SAM9263上配置了11條總線和96千字節的片上暫存SRAM。該SRAM可被部分地設定為緊密耦合式數據和指示內存。這些總線可提供多條并列片上傳輸通道和總計41.6 Gbps的片上帶寬。

          兩個EBI使ARM9 CPU和圖形處理器可同時、并行工作。at91sam9263擁有兩個EBI:一個是系統內存接口,另一個則是人機接口。第二個接口使LCD控制器和CPU無需共享內存,同時使可用的CPU MIPS增長20%到40%。

          【at91sam9263芯片資源】

          1、融合了ARM926EJ-STM ARM THUMB的處理器

          -DSP指令擴展,用于JAVA 加速處理器的JAZELLE技術

          -16K字節高速緩沖器,16K字節指令高速緩沖器,寫緩沖器

          -在220MHZ 220MIPS

          -內存管理單元

          -EmbededICETM,調試通訊信道支持

          -中等規模的執行內嵌式宏單元結構

          2、總線矩陣

          -9個32位層矩陣,允許片上總線帶寬合計達28.8Gbps

          -引導模式選項,映像命令

          3、嵌入式內存

          -一個128K字節的內部ROM,以最大總線矩陣速度實現單周期訪問

          -一個80K字節的內部SRAM,以處理器最大速度或最大總線矩陣速度實現單周期訪問

          -一個16K字節的內部SRAM,以最大總線矩陣速度實現單周期訪問

          4、雙外部總線接口(EBI0-EBI1)

          -EBI0支持SDRAM,靜態內存,使能的ECC Nand Flash 和compact Flash。

          -EBI1支持SDRAM,靜態內存,使能的ECC Nand Flash。

          5、DMA控制器

          -充當一個總線矩陣主控器

          -內嵌兩個單向信道,這兩個信道具備編程優先權、地址產生、信道緩存和控制。

          6、20個外設DMA控制器信道

          7、LCD控制器

          -支持主動或被動顯示

          -在TFT模式下每個像素最大可以24bit,在STN彩色模式下每個像素最大可以16bit。

          -在TFT模式下最大可以16M彩色,分辨率可達2048X2048,支持虛擬屏幕緩存。

          8、2D圖形加速器

          -直線拖動,塊轉移,多邊形填充,剪切,命令排隊。

          9、攝像傳感器接口

          -ITU-R BT.601/656外部接口,可編程幀捕捉速率。

          -12bit接口,可以支持高靈敏度傳感器。

          -SAV和EAV同步,preview path with scaler,YcbCr格式。

          l0、USB2.0全速(12Mbit/秒)主機雙端口

          -雙片上收發器

          -集成的FIFO和專用的DMA信道。

          l1、USB2.0全速(12Mbit/秒)設備端口

          -片上收發器,2,432字節可配置的集成DPRAM。

          l2、10/100 Base-T以太網MAC

          -獨立的媒體接口或簡化的獨立的媒體接口。

          -有用于接收和發送的28字節FIFO和專用的DMA信道。

          l3、全部特性的系統控制器,包括

          -復位控制器,停止控制器。

          -20個32bit電池后備寄存器,總計達80字節。

          -時鐘發生器和電源管理控制器。

          高級中斷控制器和調試單元。

          周期間個計時器,看門狗計時器和雙實時計時器。

          1)復位控制器(RSTC)

          -基于兩個上電復位單元,復位源識別和復位輸出控制。

          2)停止控制器(SHDWC)

          -可編程管腳控制和喚醒電路。

          3)時鐘發生器(CKGR)

          -32768Hz低耗電振蕩器用于后備電源供應,提供一個永久的低速時鐘。

          -3-20MHz片上振蕩器,兩個最大240MHz的PLL。

          4)電源管理控制器(PMC)

          -較低時鐘運行模式,軟件可編程電源優化容量。

          -4個可編程外部時鐘信號。

          5)高級中斷控制器(AIC)

          -可單獨屏蔽,8級優先權,矢量中斷源。

          -兩個外部中斷源和一個快速中斷源,虛假中斷保護。

          6)調試單元(DBGU)

          -2線UART并且支持調試通訊信道,可編程ICE存取阻止。

          7)周期性間隔計時器(PIT)

          -20bit間隔計時器加12bit間隔計數器。

          8)看門狗計時器(WDT)

          -加密保護,僅一次性編程,視窗化的16-bit計數器運行于低時鐘

          9)兩個實時計時器(RTT)

          -帶有16-bit預分頻器的自由備份計數器運行于低時鐘

          l4、5個32-bit并行輸入/輸出控制器(PIOA,PIOB,PIOC,PIOD和PIOE)

          -160可編程的I/O線同時傳輸于外部設備2 I/O

          -每一條I/O線的信號輸入、改變、中斷性能

          -個別可編程的漏極開路輸出、上拉電阻、同步輸出

          -16全面可編程信息目標郵箱,時間戳計數器

          l5、兩個多媒體接口卡 (MCI)

          – SD卡/SDIO 和 MultiMediaCard 驅動

          – 自動化協議控制和用PDC快速自動化數據傳輸

          – 每一控制器帶有兩個SD卡槽支持

          l6、兩個同步串行控制器(SSC)

          –每一個接收器和轉換器有獨立時鐘和幀同步信號

          – I2S模擬接口支持, 時間分區同步傳輸支持

          – 以32-bit數據轉換器高速持續數據流性能

          l7、一個AC97 控制器 (AC97C)

          – 6-頻道信號 AC97 模擬前端接口,插槽分配

          l8、3個通用同步和異步收發器 (USART)

          – 獨立的波特率發生器, IrDA紅外線調制、解調,曼徹斯特編碼、解碼

          – 支持 ISO7816 T0/T1 Smart 卡,硬件握手信號, RS485 支持

          l9、兩個主從串行總線接口(SPI)

          – 8到16-bit 可編程的數據長度,4個外部總線芯片選擇

          – 每秒 90Mbits速度的同步通信

          20、一個3頻道的16-bit 計時器和計數器(TC)

          – 三個外部時鐘輸入端, 每個頻道提供2個多功能 I/O 插口

          – 雙 PWM 發生器, 原理圖攫取,波形攫取模式,連接、斷開性能

          2l、一個四頻道16-bit PWM 控制器WMC)

          22、一個兩線接口 (TWI)

          – 主模式支持,支持所有的 Atmel EEPROMs

          23、所有數字引腳的IEEE 1149.1 JTAG邊界掃描

          24、電源供應

          –VDDCORE 和 VDDBU 電壓為1.08V 至1.32V

          –VDDOSC 和 VDDPLL電壓為 3.0V 至 3.6V

          –VDDIOP0 (外設I/Os)電壓為2.7V 至 3.6V

          –VDDIOP (外設 I/Os)電壓為11.65V 至 3.6V

          –VDDIOM0/VDDIOM1 可編程電壓為 1.65V 至 1.95V 或者 3.0V 至 3.6V (內存 I/Os)

          at91sam9263 CAN驅動調試心得

          之前調試CAN設備,一般用的是一個從淘寶上買的USB轉CAN的調試工具,100K -- 800K波特率基本沒有什么問題,我們也就沒有過多的去考慮一些細節的問題。忽一日,某客戶說我們的CAN驅動有問題,跟他們的設備通信不上,疑慮ing.遂帶工具前往之,試之,果然。。。。

          遂借其工具回來捯飭,久未果 查其為ZLG公司的產品,遂前往之。遇到周立功公司一個大牛,CAN專家,號稱沒有他解決不了的CAN問題,事實證明,卻是有料,周立功公司的CAN 分析儀就是他們一幫人弄的,現在不做研發,轉做服務了。拿Can分析儀查之,發現我們的CPU發出的CAN波形 波特率對不上,雖然設置為500K,可是由于CPU時鐘頻率非常規頻率,分頻以后,CAN時鐘再512K左右,ZLG公司的工具是標準品,他們一般要求時序是比較嚴格的,所以我們的設備跟他的調試工具之間通信通不上,但是網上購買的USB轉CAN的調試工具則將SJW域設置的比較大 3或者4 左右,可以跟大部分的CAN通信上,即使是對方的CAN波特率不精確,存在比較大的誤差。

          CAN問題絕大部分呢,應該就是出在波特率的精確度上,但是一般情況下沒有那么精準的測試儀器,所以搞的大家一頭霧水。適當調整SJW 同步跳轉寬度的大小,可以一定程度的解決這個問題,但是不是最佳的解決方案。雖然現象上看到,哦,通信正常了,我發的包對方可以收到,對方發的數據包我也可以收到,但是,事實是,這里面有了多次的重發,得益于CAN協議,重發,應答等等。

          下面簡單描述下CAN波特率的分析

          比如說500K波特率,一個比特被分為16個時間因子

          500K * 16 = 8M

          所以CAN時鐘應該盡量使8M的倍數。誤差盡量小。

          同理推算其他波特率跟時鐘的對應關系。

          在我們的9263應用中,MCLK = PLLA/2,CAN時鐘從MCLK分頻而來。

          所以PLLA的取值應為16M的整數倍。我們的PLLA一般設置再200M---150M,所以PLLA可取192M 176M 160M等。

          WinCE下設置就比較簡單了,Eboot啟動后,空格可以進入eboot配置菜單,可以直接設置CPU的主頻 跟 分頻,不贅述。

          裸奔的程序 則需要自己去設置倍頻跟分頻系數,從ATMEL官網下載了PLL計算工具,幫了不上忙,可能沒有那么精準,但是盡量接近就好。

          #define BOARD_MCK ((16367660 * 98 / 10) / 2) /*160M*/

          如上設置為160M的設置

          除了這個宏定義的修改以為,在board_lowlevel.c中也需要做一些修改,

          #define BOARD_MULA (AT91C_CKGR_MULA (97 《《 16))

          #define BOARD_DIVA (AT91C_CKGR_DIVA 10)

          就是那兩個系數,注意分頻系數不變,但是倍頻系數減一了,原因看數據手冊就明白。

          原來以為這樣就可以了,可是還有一個地方忽略了,看代碼

          void LowLevelInit( void )函數中

          void LowLevelInit( void )

          {

          ……。

          #if !defined(sdram)

          /* Initialize main oscillator

          初始化主振蕩器,時鐘等一系列操作

          #endif //#if !defined(sdram)

          。。。。。。。。。。。

          }

          整個過程包含在了對sdram宏的判斷內,如果定義了sdram則不做下面的處理,乖乖,你不做這個處理怎么可以呢,遂注釋掉上面兩個宏定義。

          這個宏定義不是在文件中定義的,而是在編譯器的工程設置里面,

          Options-àC/C++ Compiler Preprocessor選項卡,最下面 Defined symbols

          也可以直接把sdram去掉。

          一直在糾結SDRAM的初始化是在什么地方進行的?

          調試心得之關于SPI啟動的問題

          到底是什么問題呢:SPI DATA FLASH本身的質量有問題造成的。

          反映的現象是:從SPI DATAFLASH的0地址讀取數據是沒有任何問題的,但是如果從中間任何一段讀取數據,就有嚴重的地址偏移問題。

          調試過程及步驟如下:

          原來認為是CPU(AT91SAM9263有A版本和B版本)版本有問題,造成無法讀取FLASH造成,反饋的現象是:

          當DATA FLASH啟動后,會將第一段代碼EBOOT.nb0,存放于DATA FLASH的0X5000偏移地址,加載后,會進行WINCE的引導。

          但是實際結果是:

          ================================= 》RomBOOT 》RomBOOT 》RomBOOT 》

          INFO: Low Level Init: OK Starting main… AT45DB321 …

          Load CE-BOOT from Flash to SDRAM Jumping… -

          ==================================

          從現象上看,DATA FLASH已經找到了,也就說明SPI線路是正確的,但是為什么讀的數據有問題呢?

          懷疑問題有如下幾個:

          第一:DATA FLASH的SPI本身硬件有問題,可能存在干擾。

          第二:在從DATA FLASH拷貝數據到SDRAM中,出現錯誤,數據不正確,SDRAM初始化有問題。 第三:因我們的SPI線路和以前的版本不同,采用了MAX3002進行了隔開,懷疑MAX3002本身造成SPI線路的 不穩定。

          第四:CPU版本有問題,AT91SAM9263從A到B版本,SPI已經改過了,就我知道的是AT91SASM9263 B版本的SPI,需要兩次復位才可以工作。

          一個一個懷疑的問題進行驗證:

          一:SAM BA 2.8可以對SDRAM進行初始化,都可以進行讀寫,說明SDRAM本身硬件上無問題。

          第二:DATA FLASH ,SAMBA 2.8都可以進行讀寫,也無任何問題,同時啟動代碼可以正確執行。那么就應該可以證明SPI部分是能夠工作的,但是問題在于AT91SAM9263 B版本內部的ROM BOOT和AT91SAM9263 A版本的ROM BOOT有不同,那么就證明說:在SPI這個部分的初始化部分做了修正。所以,找到AT91SAM9263 B版本的SPI部分的ERR DATA SHEET。找問題。改了半天代碼,問題還是依舊。

          第三:實在沒有辦法了,2008年11月18日,找到百特的雷工,初步認定是CPU版本的問題,我自己認為自己的代碼水平比較落后,請求雷工幫忙,最后驗證結果如下:

          從DATA FLASH讀出的數據,放到SDRAM后出現了問題,我們以前的老板子,是無問題的。可以正確將數據從DATA FLASH讀出來,然后,顯示在串口上。每次從DATA FLASH中讀10個字節,發現讀出來的數據每次都是一致的,但是就是不正確。

          沒有辦法,雷工也是好久沒有寫代碼了,只好約好第二天,到白特找他們的工程師劉工,劉工是我老鄉,真的夠朋友,那天晚上搞到半夜,最后驗證出來,現象是:從DATA FLASH偏移0X8000地址中讀取的數據放到SDRA M中,某一個位置找到差不多的數據。最后給出結果:可能是AT91SAM9263 B版本可能有問題,但是最大的問題是:SDRAM工作后,影響了SPI的穩定性。

          第四:太晚了,大家都各自回家了(這個時候我找百特定好了A版本的CPU,說是他們現在沒貨,第二天能送來),實在是沒有任何頭緒了,沒有辦法,趕快定了CPU,AT91SAM9263 A版本,恰好,百特沒有貨,他們老板從香港定來后,我們拿到,趕快去貼上,這個過程不過是1天的時間,下午了,下午3點就搞好,帶上測試軟件,跑到李工(我們焊接的師傅)那里,把工具全部架好,一測試,郁悶死了,竟然還是不行。天呀……

          第五:看來A版本也不行,那只能懷疑是板的布線有問題了,因為沒有別的辦法可以想了,這個時候,我反倒放松了,因為我認為問題已經找到了。但是,到底是SPI的哪條線受到了干擾呢?我對百特劉工的話深信不已。實在沒有辦法,上午我趕快拿著A版本的板子跑到百特,找到劉工,(想把他驗證的結果再重演一下,劉工改了半天,發現是從DATA FALSH的0地址,讀出來數據放到SDRAM中是無問題的,一直也懷疑SDARM初始化有問題)根據這幾天的測試結果,發現有一個疑點,我發現A版本的芯片,我寫了一個小程序,從DATA FLASH中讀取數據放到SRAM中也是不正確的。而且,和以前的測試結果完全一樣。一直懷疑和芯片有關系,現在看,可以完全排除芯片AT91SAM9263的問題了。

          第六:從DATA FLASH中讀取數據放到SRAM中也是不正確的(我把SDRAM關閉了),我就推翻了劉工說的SDRAM對SPI DATA FLASH有干擾想法。

          劉工發現是從DATA FALSH的0地址,讀出來數據放到SDRAM中有大部分是相同的,這次把代碼全部恢復過來,把DATA FLASH的0地址的數據放到0X23F00000(LINUX引導程序U-BOOT的地址)-0X8000的位置,這樣,就可以保證在0X23F00000的位置上,有正確的U-BOOT程序。但是,等程序運行起來,還是沒有得到正確的啟動結果。有可能是有部分數據讀出來后,還是有不正確的。

          第七,實在是沒有辦法了,我們開始懷疑DATA FLASH有問題,恰好,我也問過我們的LISA(LISA是我們的采購,我原來一直認為這個DATA FLASH是從百特采購的,最后發現這個東西是從市場上采購來的,我很暈了,但是當時問LISA的時候,我沒有放在心上,LISA說這個芯片是原裝的),恰好我帶上了一個我們老版本的板子,將老版本的板的DATA FLASH換上去后,完全OK了。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 黄山市| 寻乌县| 鄂尔多斯市| 东台市| 通化县| 鲁甸县| 黎城县| 鲁山县| 青海省| 垣曲县| 铜陵市| 桂平市| 新化县| 嘉黎县| 三都| 屏东县| 汾阳市| 伽师县| 静宁县| 忻城县| 旌德县| 洮南市| 嘉义市| 广州市| 肥东县| 达尔| 邵阳县| 张家口市| 观塘区| 余干县| 合水县| 吉安县| 康马县| 石城县| 勐海县| 土默特右旗| 西乡县| 洛隆县| 玉屏| 库尔勒市| 疏附县|