十二 关于JTAG访真器
JTAG访真器现在用的多是简板的,一个244那种,用的没什么不好。
按照并口定义不同分几种,建议选WIFFLER定义的,因为支持的软件多。这个网上多的是,不多说了。
值得提的是有的JTAG访真器原理图上有跳线用来使能复位信号,这个一般不跳上。就是不用复位信号,因为JTAG协议里本身也可以控制44B0复位。
当然,板子上的复位信号跳线也不用跳。
十三 哪个公司的ARM
这个是问题比较简单。
1 ARM7主要就几个公司的
三星,PHILIP,ATMEL的
ATMEL的有比较便宜的AT91SAM7S32 和AT91SAM7S64 专为8位应用产品量身定做,价格很便宜好象《3刀吧。和PHILIP的21XX差不多,资料太少,项目中选还不错。
其他两家上面说了的不多说了吧
2 ARM9
这个玩2410和2440的多吧,现在2440还比较火啊 可以考虑买个了
但是2410就比较便宜了,作为学习来说反到和不错,推荐整一个:)
其实ARM9用的最多的领域应该是消费电子,比如手机PDA,而这上面用的多的应该是INTEL的和TI的吧。
但是INTEL的TI的入门材料少,价格高,自己看情况定吧。
UBOOT命令总结(转)
很好的UBOOT命令总结,我在起步时就是看的这篇东西,熟悉了以后就用“?”看自带帮助就行:)
Printenv 打印环境变量。
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 设置新的变量
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 保存变量
命令将当前定义的所有的变量及其值存入flash中。用来存储变量及其值的空间只有8k字节,应不要超过。
Loadb 通过串口Kermit协议下载二进制数据。
Tftp 通过网络下载程序,需要先设置好网络配置
Uboot> setenv ethaddr 12:34:56:78:9A:BC
Uboot> setenv ipaddr 192.168.1.1
Uboot> setenv serverip 192.168.1.254 (tftp服务器的地址)
下载bin文件到地址0x20000000处。
Uboot> tftp 20000000 application.bin (application.bin应位于tftp服务程序的目录)
Uboot> tftp 32000000 vmlinux
把server(IP=环境变量中设置的serverip)中/tftpdroot/ 下的vmlinux通过TFTP读入到物理内存32000000处。
Md 显示内存区的内容。
Mm 修改内存,地址自动递增。
Nm 修改内存,地址不自动递增。
Mw 用模型填充内存
mw 32000000 ff 10000(把内存0x32000000开始的0x10000字节设为0xFF)
Cp 拷贝一块内存到另一块
Cmp 比较两块内存区
这些内存操作命令后都可加一个后缀表示操作数据的大小,比如cp.b表示按字节拷贝。
Protect 写保护操作
protect on 1:0-3(就是对第一块FLASH的0-3扇区进行保护)
protect off 1:0-3取消写保护
Erase 擦除扇区。
erase: 删除FLASH的扇区
erase 1:0-2(就是对每一块FLASH的0-2扇区进行删除)
对DataFlash的操作
U-Boot在引导时如果发现NPCS0和NPCS3上连有DataFlash,就会分配虚拟的地址给它,具体为 :
0xC0000000---NPCS0
0xD0000000---NPCS3
run 执行设置好的脚本
Uboot> setenv flashit tftp 20000000 mycode.bin; erase 10020000 1002FFFF;
cp.b 20000000 10020000 8000
Uboot> saveenv
Uboot> run flashit
bootcmd 保留的环境变量,也是一种脚本
如果定义了该变量,在autoboot模式下,将会执行该脚本的内容。
Go 执行内存中的二进制代码,一个简单的跳转到指定地址
Bootm 执行内存中的二进制代码
要求二进制代码为制定格式的。通常为mkimage处理过的二进制文件。
起动UBOOT TOOLS制作的压缩LINUX内核, bootm 3200000
Bootp 通过网络启动,需要提前设置好硬件地址。
? 得到所有命令列表
help help usb, 列出USB功能的使用说明
ping 注:只能开发板PING别的机器
usb
usb start: 起动usb 功能
usb info: 列出设备
usb scan: 扫描usb storage(u 盘)设备
kgo 起动没有压缩的linux内核
kgo 32000000
fatls 列出DOS FAT文件系统
fatls usb 0列出第一块U盘中的文件
fatload 读入FAT中的一个文件
fatload usb 0:0 32000000 aa.txt 把USB中的aa.txt 读到物理内存0x32000000处!
flinfo 列出flash的信息
nfs
nfs 32000000 192.168.0.2:aa.txt
把192.168.0.2(LINUX 的NFS文件系统)中的NFS文件系统中的aa.txt 读入内存0x32000000处。
CPU频率计算方法---PLL设置
看见很多朋友不会计算PLL分频和串口频率,整理个笔记发上来
cpu时钟频率和串口波特率的计算公式
S3C44B0的系统时钟设置公式
Fpllo 为系统的主频,此处为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应该尽可能的大)
e) 1MHz <= Fin/p < 2MHz (最好是Fin/p = 1MHz)
f) 如果PLL打开则:Fpllo = Fout
g) 这样计算出MDIV, PDIV, SDIV的值写入PLLCON寄存器中就可设置Fpllo的输出频率。
根据 d)知道s=1
根据 e)知道p=10
再根据 a)就知道了m=120,注意2^s代表2的s次方
再根据 b)知道MDIV=112, PDIV=8, SDIV=1
根据44B0数据手册5-14页算出 PLLCON=0X70081
注意:PLLCON的结果不为一!比如P可以取8 取7……
注意:PLLCON寄存器是20位的 各个区域中间有空的
比如MDIV是寄存器里19-12位,PDIV是9-4位两个中间有11,10位空,如果用2进制算就添0
不过做过硬件的就知道 大可不必只要把MDIV, PDIV, SDIV用WEINDOWS自带计算机直接由2进制转换成16进制顺序写就行
比如MDIV=112=0x70, PDIV=8=0x08, SDIV=1=0x1
PLLCON寄存器就是0x70081(看到这 连手册都不用翻了吧?:))
还得多说一句 不是0x700801,因为SDIV=1=0x1不是0X01,跟PDIV=8=0x08不一样
S3C44B0的UART波特率计算公式---分频设置
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设置
最近的朋友很多问MINICOM设置的问题
把原来写的整理一下 发一下 现成的还行 有朋友问我驱动怎么开发
这个就比较麻烦了:)还是等我过段时间了也把手头的几个驱动搞定了再说
---------正文-------------
MINICOM是LINUX提供的和WEINDOWS超级终端一样的工具,一般用做串口与开发板通信,当然有的板子也用USB,但这里只介绍串口的设置
一 VMWARE虚拟机添加串口(如果没用虚拟机可以跳过这步)
如果在VMWARE虚拟机下 一定要记得先确认这步 要不不好使 很多朋友的问题就在这里!
先关闭虚拟机下的LINUX,然后设置一下虚拟机:在vm-〉settings-〉hardware里添加串口 COM1 COM2都加上吧
二 设置MINICOM
进LINUX系统 开个控制台 字符里输入minicom 就启动了
这时一般还要设置一下
Ctrl+A进入控制界面(Esc返回)按Z进设置
一般设置两个
1 按O(注意:是O不是零)设置第三第四项,分别是串口设置与MODEM设置
串口设置:不用说了吧 进去都看明白了 敲字母 设置相应项目 比如“115200 8-N-1”
MODEM设置:也要设置一下 要不有的看不到东西 把上面两个选项都清空 就是按那行前面的字母(好象是‘A’和什么)然后光标就跳过去了 删之
回车 到开始选第三第四项的菜单 选下面的保存(别忘了保存 菜鸟们常犯)
2 回到刚才按O的界面 看一下P 里面的串口设置对不对
对就不用改了 不对改之
提醒一下:LINUX设备的编号是从0开始的 比如串口1也就是COM1在LINUX里的设备号叫ttyS0
串口设置里面要用到 那里添全部路径也就是'/dev/ttyS0'
好了 就这么简单
uclinux编译文档
user94/mamajinco/upload/1012638628.rarUCLINUX编译的过程是非常折磨人的,我在这整了3天!妈的!把很多公司的都试遍了。第3天的晚上10点搞定了~~
但说真的,很难写下来整体过程,因为跟版本有关,跟各个板子也有关系……
所有的移植都是用2.4做的,谁让咱是菜鸟呢,先从简单的做。
总结几点吧,介绍个现在主流的立宇泰的板子UCLINUX编译方法和我自己拿HFRK的板子提供的UCLINUX改的8019和NFS的方法
一 立宇泰(凭回忆,有些地方当时没记下来)
1下载
arm-elf-tools-20030314.sh//开发工具
uClinux-dist-20040408.tar.gz//源代码包
uClinux-20040408-ARMSYS.rar//立宇泰的补丁
configfiledemo.rar//立宇泰的设置文件
前两个UCLINUX的网站有下的,很快。
后两个立宇泰公司网站有下的,很小,也很快。
2 安装
arm-elf-tools-20030314.sh
在LINUX(我用的VMWARE跑的PC4)下双击,选运行就行,不多说了,有人这里出过问题,提示一个错误,去21IC搜索一下,把一个参数改一下就行。但我的没这个问题。
uClinux-dist-20040408.tar.gz
考到/usr/src/下,右键截压缩到当前目录,也没什么说的。就是记得硬盘要有足够的空间,这个比较大,一般还得有几个备份,得2G左右。
uClinux-20040408-ARMSYS.rar
这个补丁确实不错!!好商家!还共享了,改了一堆文件。
截压缩不说了,得到PARCH文件,拷贝到刚才UCLINUX源代码包目录下,注意,要到uClinux-dist目录里。不是uClinux-dist-20040408.tar.gz目录里。
还不能直接补丁,需要改一下uClinux-dist/vector/Samsung/4510B这个文件夹,直接把名字改成44B0就行了。
打开终端吧,CD到uClinux-dist目录里输入以下命令:
patch -p1 < uClinux-20040408-ARMSYS.patch
注意-P1是数字一不是L字母,命令什么意思就不解释了,GOOGLE一下,有个兄弟专门讲了。
打包到最后会有问题,因为刚才咱们把4510直接改成44B0了嘛,问你问题的时候敲的N吧,退出。
把uClinux-dist/vector/Samsung/44B0里Makefile 和 rc打开,对着uClinux-20040408-ARMSYS.patch改。
具体方法是:双击(这里PC机都默认使用GNOME,比KDE方便,比如双击打开)查看PATCH文件。对着改吧。
补充个语法知识:.patch里面主要有几种符号分别是“+++”“---”'+''-''@@''diff'
每个区域都是diff --- +++ @@四行开始 之后是+ -或者无符号的行,+代表在一个位置加一行,-代表删除一行,什么都不带就什么都不做,用来定位的。
好了,文件最后可以找到 diff uClinux-dist/vector/Samsung/44B0开始的文件了吧?
对着把Makefile 和 rc改了吧。
打完补丁,还得做一件事,把/uClinux-dist/Linux-2.4.x/Driver/Block/blkmem.c改了
#ifdef CONFIG_BOARD_SNDS100
extern char romfs_data[];
extern char romfs_data_end[];
#endif
后加个
#ifdef CONFIG_BOARD_MBA44
extern char romfs_data[];
extern char romfs_data_end[];
#endif
#ifdef CONFIG_BOARD_MBA44
{0, 0xc700000, -1},
#endif
改策成
#ifdef CONFIG_BOARD_MBA44
{0, romfs_data, -1},
#endif
要不编译后的内核运行的时候会有“Kernel panic: VFS: Unable to mount root fs on XXXXX”错误
3 设置
make menuconfig
当然 也可以make Xconfig 但不推荐,虽然显示很好,但速度慢~~
进了菜单,基本就几个键子上 下 左 右 回车 空格。
选什么比较麻烦,建议第一次先用刚才下的configfiledemo立宇泰的设置文件,解压以后是三个文件,分别对应主菜单,内核和用户菜单。
选择Load an Alternate Configuration File
里面输入文件的地址与名称,记得开始的时候说的VMWARE-TOOS共享吧?把这几个文件拷贝到合适的目录下吧,我就放在uClinux-dist-20040408.tar.gz下了。
左右选《EXIT》退出。选保存。
一会自动弹出KERNEL设置菜单,和上面一样Load an Alternate Configuration File,选config_kernel文件。
需要注意的是这里的USB好象不对,因为板子上没整USB(以后再整)就把USB的选项直接去掉了(到USB子菜单下把[*]去了)。
要不会有hcb.c错误。
System Type里要改一下
(Samsung) ARM system type
[*] Set flash/sdram size and base addr
(00800000) (S)DRAM Size
(00200000) FLASH Size
(S3C44B0X-MBA44) Board Implementation
Block devices也改一下
[*] RAM disk support
(4096) Default RAM disk size
(AMD) FLASH type
(AUTO) FLASH size
(AUTO) FLASH bit width
General setup改一下
[*] Timer and CPU usage LEDs
[*] Timer LED
[*] CPU usage LED
其他没说就是别动
左右选《EXIT》退出。选保存
一会自动弹出USER设置菜单,和上面一样Load an Alternate Configuration File,选config_user文件。(语法多整齐)
没有注意了,直接左右选《EXIT》退出。选保存。
说实在的,要是没有这些CONFIG文件,自己改是件很麻烦的事,本人就尝试了自己增加NFS和修改8019(我的板子是自己画的和这个不一样)那叫一个麻烦~~~。建议大家新手还是先把这些顺利的做完了再说改的。
退出以后就是编译了。
4 编译
几大命令
make dep
make clean
make lib_only
make user_only
make romfs
make
顺利的话一次全的执行了,但第3步要是自己鼓捣过在这里就要受苦了,比如后面要讲的把驱动编译进内核里。
这里要说的是,出问题不可怕,但一要做好记录,知道自己改什么,错误可能出现在什么地方,因为报告的错误很可能不是出现错误的位置。二要善于搜索,使用GOOGLE搜索。三 要BBS提问的时候把错误,操作记录都说清楚了,等待高手给你解答。四就是自己要积累看MAKE错误的知识。此外别无他法!
二 好了
我最后用的是HFRK的包,版本是2005311,不用打补丁。但听说所有2005311的包都不用打了,好消息啊。但编译的过程仍然折磨人。
设置与编译的过程仍然和上面一样,这里共项我的CONFIG文件供大家参考吧。就不多说了。
下面说我自己改8019驱动的方法。
8019用的是drivers/net/下的ne.c文件改的。
改之前要差几点:8019是8位还是16位,地址线是怎么对应的(8019是ADDR1对44B0的ADDR几?),8019挂在44B0的哪个BANK上,8019使用哪个中断,中断号多少。
好了,对应的改吧。
先改文件。
drivers/net/ne.c
找到CONFIG_BOARD_MBA44,修改一下中断号dev-irq,改成我们电路中使用的EINT1(中断号24),挂在BANK3上地址0x06000000
……
#elif defined(CONFIG_BOARD_MBA44)
static int once = 0;
if (once)
return -ENXIO;
dev->base_addr = base_addr = 0x06000000;
dev->irq = 24 ;
once++;
……
注意:一定要知道8019地址线是怎么对应的,我的是0对0(8位)但有的朋友8019是7对0,就要改了,但是具体哪个文件忘了,GOOGLE搜索一下吧:)
进make menuconfig里把以下选了
1 General Setup --->
Networking Support
2Networking options --->
Packet socket
TCP/IP networking
3 进Networking device Support---》
4 File system --->
Network device support?
Ethernet (10 or 100Mbit) --->
Other ISA cards
NE2000/NE1000 support
注意:这里通过[ ] 16Bits mode support选择8019工作位,我没选,因为做的是8位的
4 Network Applications --->
arp
ifconfig
inetd
ping
route
好了,之后就是编译了,烧写,然后测试一下PING宿主机,NFS挂一下看看。
注意:宿主机的防火墙要关了,不然PING不通,当然NFS也不行。
好了,编译内核就到这里,因为过于繁琐,只能分部分来简化写了~~大家有问题再交流吧。
搞定UCLINUX移植以后就开始整个最小的程序吧,当然是HELLOWORLD了:) int main(void) 二 然后编写个makefile吧,别总用arm-elf-gcc了。 all: $(EXEC) romfs: 三 下面就是有朋友问我怎么把程序下到板子里了 1)在uClinux-dist/user/下建立目录hello 2)修改uClinux-dist/user/makefile 在适当位置 找一行(这句语法扎堆的地方)加 3)记住CONFIG_USER_HELLO这个名(自己可以改的 ) 4)改uClinux-dist/config/Configure.in里按照扎堆的原则加下面几行
一 先写个helloworld.c (对于小代码我喜欢先在WINDOW下建个“新建 文本文档.txt”再在里面写代码,然后保存后改名成helloworld.c 注意的是扩展名也要从TXT改成C才行,原来说过,不多说了)
里面写下面等号里的代码:
==================
#i nclude
#i nclude
{
printf('hello world ! I got it!n');
return 0;
}
==================
不用解释了吧:)
为以后编写大规模程序打个基础:)
建个makefile(和前面一样,先TXT然后改名,没有扩展名)
=====================
EXEC = helloworld
OBJS = helloworld.o
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
$(ROMFSINST) /bin/$(EXEC)
clean:
rm -f $(EXEC) *.elf *.gdb *.o
======================
基本能看明白吧?MAKE的语法比较复杂,就不多讲了,可以看我在前几篇笔记里推荐的ZLG那本书。但幸运的是基本不用自己动手了,LINUX源代码里有很多MAKE 拿来改改吧:)
一般说来有几种方法。
1 板子挂载宿主机的NFS共享目录,把程序拷贝到/tmp目录(在RAM里)测试一下,但缺点是掉电要消失,只适合做调试时用。
2 做JFFS之类的日志文件系统,和上面一样NFS挂载拷贝过来,JFFS文件系统可以保证掉电不消失,类似U盘里拷贝程序(只是结果类似,原理完全不同)。
3 直接把程序烧写进ROMFS文件系统,这里就只介绍这种。原因有两点 首先 我还没学怎么做JFFS,其次 我还没学怎么做JFFS。哈哈
好了,那开工。
把helloworld.c和makefile拷贝到里面,怎么拷贝不用说了吧?VMWARE-TOOLS共享文件夹吧。
dir_$(CONFIG_USER_HELLO) += hello
在uClinux-dist/config/Configure.help里加(扎堆)下面两行
CONFIG_USER_HELLO
Only print hello world
上面是名(和前面必须一致)下面是注释
#############################################################################
mainmenu_option next_comment
comment 'Hello World'
bool 'demo' CONFIG_USER_MYAPP_DEMO
endmenu
#############################################################################
#号中间加的就是语法了,基本意思就是在Hello World--->下加个[]demo
编译过内核的都熟悉吧:)
上一篇:学习ARM开发(23)
下一篇:ARM裸机篇--按键中断
设计资源 培训 开发板 精华推荐
- 应用示例 - STM32F101xx 和 STM32F103xx 内核和系统外设中的 4 个
- ADR423 超精密、低噪声、3.00 Vout XFET 电压基准的典型应用
- 使用 Infineon Technologies AG 的 IRU3004 的参考设计
- 用于照明的 6-LED 调光 LED 驱动器
- 物联网RGB灯带+534640A
- LT3091HR 浮动 3 端可调稳压器的典型应用
- BD49xxx系列BD4936电压检测IC的典型应用
- MAXREFDES1036:20.25W离线式反激转换器
- DC1889A,使用 LTM4624EY 微型模块稳压器的演示板,微型高性能、高效率降压稳压器
- 使用 Analog Devices 的 ADP1823ACPZ 的参考设计
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况