?? arm入門筆記 by mamajinco.txt
字號:
3 UCLINUX 算投機(jī)嵌入式系統(tǒng):)ARM7上可以跑,由有LINUX近親,學(xué)好好可以比較方便的轉(zhuǎn)向LINUX,像我一樣的窮鬼用吧,呵呵
4 VXWORKS
學(xué)好后可以找到高薪工作,但工作機(jī)會本身并不比LINUX好找。
5 當(dāng)單片機(jī)用
不推薦,雖然我景仰的ZLG一直號召這么干。因為對于學(xué)習(xí)來說多進(jìn)程的系統(tǒng)設(shè)計才是ARM7的玩頭,至少你也要整個UCOS啊:)
有朋友問我先學(xué)這個當(dāng)基礎(chǔ)不行嗎?那當(dāng)然可以~~但我當(dāng)時就用了1周搞定,就是我先的ADS在RAM中調(diào)試的筆記。后來我清空FLASH用的小段程序還是當(dāng)時寫的LED閃爍程序呢。另外1周里其中還因為自己過于菜,沒把OM設(shè)置好導(dǎo)致晶陣不陣
哈哈。這個是必須做的,但一帶而過。目標(biāo)放的遠(yuǎn)一點。
八 學(xué)習(xí)要用多長時間
我從菜鳥到現(xiàn)在兩個多月,中間被打擾數(shù)次。仍然搞定了PCB設(shè)計與制版,RAM調(diào)試,F(xiàn)LASH下載,UBOOT移植和下載UCLINUX(沒剪裁,用現(xiàn)成的),LCD驅(qū)動。
再次坦誠的說:我確實比較菜,說這些不是讓大家羨慕,只是告訴你們“你們應(yīng)該比這個更好”
我相信良好的態(tài)度+合適的方法+及時的總結(jié)=成績
九 ARM都玩什么
就幾點
1 硬件設(shè)計
2 系統(tǒng)移植
3 驅(qū)動開發(fā)
4 應(yīng)用開發(fā)
沒了。其中推薦把注意力放在后兩個上,3有難度,4比較靈活,最重要的是都是找工作的砝碼。
十 我用的什么板子
很多人問我這個問題,我特意寫過一個的。再說一次吧。
我是自己做的,RAM、ROM、8019等比較麻煩而當(dāng)時的自己不理解的都按照龔俊的做的。保持其他不便的情況下做了如下改動。
1 加了串口通信的GPS模塊、 GPRS模塊
一個UART0,一個UART1,當(dāng)與要用超級終端時用跳線切換。
2 SD卡,和7843觸摸屏
同時掛在SPI總線上,因為SPI只能掛一個設(shè)備,同時還做了I/O模擬的準(zhǔn)備,把兩個設(shè)備又通過跳線掛在4個IO上。
3 擴(kuò)了個IIC的35個鍵子的鍵盤
用的ZLG的7290,不占用CPU,最大支持64個鍵子,只上了35個,其他留接口。
4 把LCD接口按照買的LCD改裝了,可以用FPC線直接連接。
所以改動雖然多,但真正很移植了,初期調(diào)試有關(guān)的并沒動,就是為了現(xiàn)在不那么菜的時候做準(zhǔn)備:)
十一 開發(fā)流程
這里是我的開發(fā)流程
1 設(shè)計原理圖(含WIGGLER的JTAG訪真器)
2 設(shè)計PCB(含WIGGLER的JTAG訪真器)
3 制版
4 焊接電壓,確定電壓沒問題
5 焊接44B0+JTAG電路+WIGGLER的JTAG訪真器+周邊電路,用BANYANT+仿真器連接,BANYANT提示錯誤,但可以顯示44B0編號,好象是0X0F0F0F0F只類的,說明44B0沒問題
6 焊接晶體+RAM+ROM+周邊電路,用BANYANT+仿真器連接,可以顯示正確的44B0了
7 用BANYANT+仿真器連接,開AXD,在命令行窗口操作RAM,看可不可以修改,可以的話(用內(nèi)存窗口看RAM地址)RAM就沒問題
可以用這個命令“setmem 0xc000000,0xffffffff,32”
我的RAM掛在BANK6上 所以地址是0XC000000,你要是改了就也得改。
8 用我寫的《自己寫了個C工程模板又寫了個使用說明 》里的方法調(diào)試程序吧,寫個簡單的,我當(dāng)時寫個LED閃爍的。看好使不。
9 把程序按照《FLASH燒寫總結(jié) 》里的燒到FLASH里,測試一下
10 按照《UBOOT 移植操作》移植UBOOT
11 按照《UCLINUX下載簡單說明》下個UCLINUX
12 看看驅(qū)動開發(fā)的方法,自己寫個驅(qū)動看看
13 還有很多事東西著你玩 呵呵
十二 關(guān)于JTAG訪真器
JTAG訪真器現(xiàn)在用的多是簡板的,一個244那種,用的沒什么不好。
按照并口定義不同分幾種,建議選WIFFLER定義的,因為支持的軟件多。這個網(wǎng)上多的是,不多說了。
值得提的是有的JTAG訪真器原理圖上有跳線用來使能復(fù)位信號,這個一般不跳上。就是不用復(fù)位信號,因為JTAG協(xié)議里本身也可以控制44B0復(fù)位。
當(dāng)然,板子上的復(fù)位信號跳線也不用跳。
十三 哪個公司的ARM
這個是問題比較簡單。
1 ARM7主要就幾個公司的
三星,PHILIP,ATMEL的
ATMEL的有比較便宜的AT91SAM7S32 和AT91SAM7S64 專為8位應(yīng)用產(chǎn)品量身定做,價格很便宜好象《3刀吧。和PHILIP的21XX差不多,資料太少,項目中選還不錯。
其他兩家上面說了的不多說了吧
2 ARM9
這個玩2410和2440的多吧,現(xiàn)在2440還比較火啊 可以考慮買個了
但是2410就比較便宜了,作為學(xué)習(xí)來說反到和不錯,推薦整一個:)
其實ARM9用的最多的領(lǐng)域應(yīng)該是消費電子,比如手機(jī)PDA,而這上面用的多的應(yīng)該是INTEL的和TI的吧。
但是INTEL的TI的入門材料少,價格高,自己看情況定吧。
UBOOT命令總結(jié)(轉(zhuǎn))
很好的UBOOT命令總結(jié),我在起步時就是看的這篇東西,熟悉了以后就用“?”看自帶幫助就行:)
Printenv 打印環(huán)境變量。
Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
Environment size: 80/8188 bytes
Setenv 設(shè)置新的變量
Uboot> setenv myboard AT91RM9200DK
Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
myboard=AT91RM9200DK
Environment size: 102/8188 bytes
Saveenv 保存變量
命令將當(dāng)前定義的所有的變量及其值存入flash中。用來存儲變量及其值的空間只有8k字節(jié),應(yīng)不要超過。
Loadb 通過串口Kermit協(xié)議下載二進(jìn)制數(shù)據(jù)。
Tftp 通過網(wǎng)絡(luò)下載程序,需要先設(shè)置好網(wǎng)絡(luò)配置
Uboot> setenv ethaddr 12:34:56:78:9A:BC
Uboot> setenv ipaddr 192.168.1.1
Uboot> setenv serverip 192.168.1.254 (tftp服務(wù)器的地址)
下載bin文件到地址0x20000000處。
Uboot> tftp 20000000 application.bin (application.bin應(yīng)位于tftp服務(wù)程序的目錄)
Uboot> tftp 32000000 vmlinux
把server(IP=環(huán)境變量中設(shè)置的serverip)中/tftpdroot/ 下的vmlinux通過TFTP讀入到物理內(nèi)存32000000處。
Md 顯示內(nèi)存區(qū)的內(nèi)容。
Mm 修改內(nèi)存,地址自動遞增。
Nm 修改內(nèi)存,地址不自動遞增。
Mw 用模型填充內(nèi)存
mw 32000000 ff 10000(把內(nèi)存0x32000000開始的0x10000字節(jié)設(shè)為0xFF)
Cp 拷貝一塊內(nèi)存到另一塊
Cmp 比較兩塊內(nèi)存區(qū)
這些內(nèi)存操作命令后都可加一個后綴表示操作數(shù)據(jù)的大小,比如cp.b表示按字節(jié)拷貝。
Protect 寫保護(hù)操作
protect on 1:0-3(就是對第一塊FLASH的0-3扇區(qū)進(jìn)行保護(hù))
protect off 1:0-3取消寫保護(hù)
Erase 擦除扇區(qū)。
erase: 刪除FLASH的扇區(qū)
erase 1:0-2(就是對每一塊FLASH的0-2扇區(qū)進(jìn)行刪除)
對DataFlash的操作
U-Boot在引導(dǎo)時如果發(fā)現(xiàn)NPCS0和NPCS3上連有DataFlash,就會分配虛擬的地址給它,具體為 :
0xC0000000---NPCS0
0xD0000000---NPCS3
run 執(zhí)行設(shè)置好的腳本
Uboot> setenv flashit tftp 20000000 mycode.bin\; erase 10020000 1002FFFF\;
cp.b 20000000 10020000 8000
Uboot> saveenv
Uboot> run flashit
bootcmd 保留的環(huán)境變量,也是一種腳本
如果定義了該變量,在autoboot模式下,將會執(zhí)行該腳本的內(nèi)容。
Go 執(zhí)行內(nèi)存中的二進(jìn)制代碼,一個簡單的跳轉(zhuǎn)到指定地址
Bootm 執(zhí)行內(nèi)存中的二進(jìn)制代碼
要求二進(jìn)制代碼為制定格式的。通常為mkimage處理過的二進(jìn)制文件。
起動UBOOT TOOLS制作的壓縮LINUX內(nèi)核, bootm 3200000
Bootp 通過網(wǎng)絡(luò)啟動,需要提前設(shè)置好硬件地址。
? 得到所有命令列表
help help usb, 列出USB功能的使用說明
ping 注:只能開發(fā)板PING別的機(jī)器
usb
usb start: 起動usb 功能
usb info: 列出設(shè)備
usb scan: 掃描usb storage(u 盤)設(shè)備
kgo 起動沒有壓縮的linux內(nèi)核
kgo 32000000
fatls 列出DOS FAT文件系統(tǒng)
fatls usb 0列出第一塊U盤中的文件
fatload 讀入FAT中的一個文件
fatload usb 0:0 32000000 aa.txt 把USB中的aa.txt 讀到物理內(nèi)存0x32000000處!
flinfo 列出flash的信息
nfs
nfs 32000000 192.168.0.2:aa.txt
把192.168.0.2(LINUX 的NFS文件系統(tǒng))中的NFS文件系統(tǒng)中的aa.txt 讀入內(nèi)存0x32000000處。
CPU頻率計算方法---PLL設(shè)置
看見很多朋友不會計算PLL分頻和串口頻率,整理個筆記發(fā)上來
cpu時鐘頻率和串口波特率的計算公式
S3C44B0的系統(tǒng)時鐘設(shè)置公式
Fpllo 為系統(tǒng)的主頻,此處為60MHz
Fin 為晶振的頻率,此處為10MHz
一. 通過PLL輸出時鐘脈沖頻率的計算:
a) Fpllo = (m × Fin)/ (p × 2^s)
b) m = (MDIV + 8) , p = (PDIV + 2), s = SDIV
c) 20MHz < Fpllo < 66MHz
d) Fpllo * 2s < 170MHz (s應(yīng)該盡可能的大)
e) 1MHz <= Fin/p < 2MHz (最好是Fin/p = 1MHz)
f) 如果PLL打開則:Fpllo = Fout
g) 這樣計算出MDIV, PDIV, SDIV的值寫入PLLCON寄存器中就可設(shè)置Fpllo的輸出頻率。
根據(jù) d)知道s=1
根據(jù) e)知道p=10
再根據(jù) a)就知道了m=120,注意2^s代表2的s次方
再根據(jù) b)知道MDIV=112, PDIV=8, SDIV=1
根據(jù)44B0數(shù)據(jù)手冊5-14頁算出 PLLCON=0X70081
注意:PLLCON的結(jié)果不為一!比如P可以取8 取7……
注意:PLLCON寄存器是20位的 各個區(qū)域中間有空的
比如MDIV是寄存器里19-12位,PDIV是9-4位兩個中間有11,10位空,如果用2進(jìn)制算就添0
不過做過硬件的就知道 大可不必只要把MDIV, PDIV, SDIV用WEINDOWS自帶計算機(jī)直接由2進(jìn)制轉(zhuǎn)換成16進(jìn)制順序?qū)懢托?比如MDIV=112=0x70, PDIV=8=0x08, SDIV=1=0x1
PLLCON寄存器就是0x70081(看到這 連手冊都不用翻了吧?:))
還得多說一句 不是0x700801,因為SDIV=1=0x1不是0X01,跟PDIV=8=0x08不一樣
S3C44B0的UART波特率計算公式---分頻設(shè)置
S3C44B0的UART波特率計算公式
MCLK即主頻 此處為60MHz
UBRDIVn(又稱divisor) = ( (int)(MCLK / (bps * 16) + 0.5) – 1 )
MCLK = Fout = Fpllo
Bps = 1200,9600,19200,38400,57600,115200
例如 主頻=60MHz=60000000Hz
串口速度選115200
divisor=取整[60000000/(115200*16) + 0.5] -1 = 32
MINICOM設(shè)置
最近的朋友很多問MINICOM設(shè)置的問題
把原來寫的整理一下
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -