基於S3C4510B的VxWorks系統BSP設計

admin @ 2014-03-25 , reply:0

    1 介紹
       S3C4510B是三星公司推出的針對嵌入式應用的 16/32 位嵌入式處理器,該微控制器專為乙太網通信系統的集線器和路由器而設計,具有低成本和高性能的特點, S3C4510B中內置了ARM公司設計的 16/32 位ARM7TDMI處理器, 可以執行 32 位的ARM指令,也可執行 16 位的THUMB指令, 並集成了多種外圍部件,主要有:
● 時鐘頻率50MHz
● 內核/IO電壓 3.3V
● 8KB的 Cache/SRAM
● 一個 10/100Mbps 乙太網控制器,MII 介面
● 兩個 HDLC 通道,每個通道可支持 10Mbps
● 兩個 UART 通道
● 兩個 DMA通道
● 兩個 32位定時/計數器
● 18 個可編程 I/O 口
● 中斷控制器,支持 21個中斷源,包括 4 個外部中斷
● 支持 SDRAM,EDO DRAM,SRAM,Flash 等
● 具有擴展外部匯流排
● JTAG 介面,支持軟體開發 ,硬體調試
S3C4510B支持目前常用的嵌入式操作系統,如VxWorks、pSoS、uClinux等,本文將主要介紹VxWorks
操作系統下的軟體開發。
ARM7TDMI是ARM 家族通用的一款 32 位微處理器,它主要為用戶提供了高性能、低價格解決方案。 
ARM7TDMI 具有三級流水線的 32 位 RISC 處理器,處理器結構為馮·諾依曼 Load/Store。該 CPU 具有
兩種指令集,即 ARM 和 Thumb 指令集。ARM 指令集是 32 位,它可以利用 CPU 最大性能;而 Thumb 指令集則
是 16 位指令集。
ARM7TDMI 內核方塊圖如圖 1 所示。 
        
 
    2 系統硬體圖 
    該系統主要以 S3C4510B為核心,外圍集成了乙太網卡、SDRAM、FLASH、UART 以及HDLC 等。圖2 是以S3C4510B 為核心的最小系統設計圖。 
       
    SDRAM選用HY57V653220(8Mbyte)、兩片FLASH分別為AM29F040(存放bootrom)和T28F160BT(作為文件系統用)。

    3 VxWorks 操作系統下 BSP 構建
    在完成板上基本硬體的測試后,下面我就開始對 vxWorks操作系統下 BSP 進行開發,開發前需要做一些準備工作,如準備開發工具等。
① 開發工具用的是 Tornado2.2 for ARM;
② 參考資料有 BSP Kit、S3C4510B DataSheet;
③ 參考 Tornado2.2 for ARM 下自帶的 wrSBCArm7 BSP;
④ 燒寫程序採用編程器。
通常在開發BSP的時候,我們需要在Tornado原帶BSP目錄下找一個與我們所用的處理器相同或相近。與 BSP 相關的文件有:romInit.s、sysAlib.s、bootInit.c、bootConfig.c、sysLib.c、config.h、configNet.h、makefile以及與我們硬體相關的,如串口 sysSerial.c 等。由於篇幅所限,具體的文件作用在此就不說了。下面主要根據 S3C4510B 來闡述一下 BSP 開發步驟。
(1)拷貝 BSP
將 wrSBCArm7 BSP 拷貝一份並命名為 4510BSP,接下來的工作就是修改該目錄下的文件,從而得到自己的 BSP。
(2)修改 MakeFile 文件
修改 4510BSP 目錄下的makefile 文件,修改如下幾行:
TARGET_DIR = 4510BSP # changed by caiyang
VENDOR = CAI # changed by caiyang
BOARD = MyArmBoard # changed by caiyang
ROM_TEXT_ADRS = 01000000 # ROM entry address
ROM_WARM_ADRS = 01000004 # ROM warm entry address
ROM_SIZE = 00080000 # number of bytes of ROM space
RAM_LOW_ADRS = 00006000 # RAM text/data address (bootrom) 
RAM_HIGH_ADRS = 00486000 # RAM text/data address (bootrom)
MACH_EXTRA =
註解:ROM_TEXT_ADRS:BOOT ROM 的入口地址。對大多數板來說,這就是 ROM 地址區的首地址,然而也有的硬體配置使用 ROM 起始的一部分地址區作為複位向量,因此需要根據此設置偏移量作為它的地址。這個偏移量因 CPU 結構而定。
ROM_WARM_ADRS:BOOT ROM 熱啟動入口地址。它通常位於固定的 ROM_TEXT_ADRS+4 的地方。當需要熱啟動時,sysLib.c 文件中 sysToMonitor( )函數代碼明確的跳轉到 ROM_WARM_ADRS 地址處開始執行。
ROM_SIZE:ROM 實際大小。
RAM_LOW_ADRS:裝載 Vxworks 的地址。
RAM_HIGH_ADRS:將Boot Rom Image 拷貝到 RAM 的目的地址。
注意:RAM_LOW_ADRS 和 RAM_HIGH_ADRS 都是絕對地址,通常位於 DRAM 起始地址的偏移量處,該偏移量取決於 CPU 結構,這需要參考 VxWorks 內存分佈。對於 ARM 的內存分佈請看圖 3,從圖 3 可以看出RAM_LOW_ADRS 在DRAM+0x1000 處。這些地址對於 S3C4510B 來說都應該是重映射后的地址。
 
(3)修改 config.h 文件
主要是修改 ROM_BASE_ADRS、ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS和 undef 掉
不需要的部分。注意這些應該和 makefile 文件中設置的一致。
(4)修改 romInit.s 文件
CPU 一上電就開始執行 romInit( )函數,因此在 romInit.s 代碼段中它必須是第一個函數。對於熱啟動,處理器將會執行 romInit( )加上4 后的代碼(具體參考 sysLib.c 中的sysToMonitor( )函數)。更多的硬體初始化在 sysLib.c 中sysHwInit( )函數中,romInit( )的工作就是做較少的初始化並把控制權交給 romStart( )(在bootInit.c 文件)。
在 S3C4510B處理器中,romInit.s 文件主要做了以下幾個工作:
① 禁止 CPU中斷並切換到 SVC32 模式;
② 禁止中斷控制器;
③ 初始化 SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0 等寄存器,同時初始化了 FLASH、SDRAM、DM9008 等外圍設備;
④ 將 FLASH的內容拷貝到 SDRAM 中;
⑤ 改變 FLASH 和SDRAM 的基地址,將 SDRAM 基地址改為 0;
⑥ 初始化堆棧指針;
⑦ 跳轉到C程序 romStart( )函數中。
      在這裡,只需要修改 SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0 等寄存器來設置 FLASH、SDRAM、DM9008 的基地址和大小即可。這需要根據板上的配置來修改,修改的內容在 wrSbcArm7.h 文件中。 
      BSP 基本部分就已經修改完成,至於 bootInit.c 和 bootConfig.c 文件,我們一般不需要修改它,只是在調試過程中為了方便調試,可以將他們拷貝到 BSP 目錄下,然後修改 makefile 文件,在makefile 文件中添加如下兩句。
BOOTCONFIG = bootConfig.c
BOOTINIT = bootInit.c
(5)利用 tsfs(target server file system)下載
要利用 tsfs下載 VxWorks,首先需要配置以下內容:
① 在 config.h 文件中添加如下內容
/* Serial port configuration */
#define INCLUDE_SERIAL
#undef NUM_TTY
#define NUM_TTY N_SIO_CHANNELS
#undef CONSOLE_TTY
#define CONSOLE_TTY 0
#undef CONSOLE_BAUD_RATE
#define CONSOLE_BAUD_RATE 38400
/*** WDB ***/
#ifdef SERIAL_DEBUG
#define WDB_NO_BAUD_AUTO_CONFIG
#undef WDB_COMM_TYPE
#undef WDB_TTY_BAUD
#undef WDB_TTY_CHANNEL
#undef WDB_TTY_DEV_NAME
#define WDB_COMM_TYPE WDB_COMM_SERIAL /* WDB in Serial mode */
#define WDB_TTY_BAUD 38400 /* Baud rate for WDB Connection */
#define WDB_TTY_CHANNEL 1 /* COM PORT #2 */
#define WDB_TTY_DEV_NAME "/tyCo/1" /* default TYCODRV_5_2 device name */
#endif /* SERIAL_DEBUG */
/* tsfs added by caiyang */
#define INCLUDE_TSFS_BOOT
並修改引導行為
#define DEFAULT_BOOT_LINE \par "tsfs(0,0)host:vxWorks f=8 h=169.254.72.67 e=169.254.72.68 u=caiyang pw=caiyang"
註:串口 1用來顯示引導信息,相當於 PC 機中的顯示器,串口 2 用來下載 VxWorks 和調試。同時串口 2 波特率不能太高,經測試 115200 好像不行。
② 配置 target server
啟動 Tornado 開發環境,選擇 Tool->target server 菜單。在下拉菜單中選“target server file system”並選中 Enable File System,然後目錄指向 Vxworks所在的地方。同時注意要把 Tornado Registry打開,這樣配置完後點擊 Launch 按鈕即可連接成功,此後就可以通過串口 2 下載VxWorks 和調試。 
 
     一般情況下,我們首先調試好 BSP,然後在調試網卡。所以在調試網卡前,我們需要用串口來下載VxWorks 映像。
    至此,我們的 BSP 就開發完成。

    4 結論
    在沒有調試 BSP 的硬體工具如模擬器的時候,我們只能通過點燈或者串口輸出來定位程序執行的正確性。這大大增加了調試難度和進程。對於 BSP開發,一般需要從一個模板來修改。BSP 開發的正確性直接影響到 VxWorks 系統運行的穩定性。




[admin via 研發互助社區 ] 基於S3C4510B的VxWorks系統BSP設計已經有1210次圍觀

http://cocdig.com/docs/show-post-42552.html