打印

新手求指点 : ARM 的问题

[复制链接]
3129|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mario凯|  楼主 | 2012-12-22 17:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学了点ARM 有关的东西很多都不是很清楚,网上看了跟多资料,但是还是想不通。
希望各位指定一二。。。
板子是44B0的,软件是ADS1.2
1.Jlink 调试程序的时候,那JIink能得到芯片中的数据,那这时候程序在什么地方运行的?是芯片的sdram中么?也就是说没在flash中。。(因为我调试后,关电源载开时发现没有程序运行。。。
在设置ARM_linker时候ro是0x0c000000,我在设置成0x0c008000照样能够正常调试,那就是说只要在SDRAM中就可以啦。。那怎么解释必须从0x0处执行程序?)
对了在Jlink调试时候,还必须对SDRAM初始化。。。那初始化不就是在SDRAM 中么?到底是先用SDRAM还是先初始化?那初始化SDRAM是在哪里进行的呢?

2.ARM上电后会在0x0处执行程序,不是应该是uboot的程序么?那为什么我把流水灯的程序用ARM_FLASH烧入FLASH的0x0后能够执行呢?我换了地址FLASH中的0x02000照样能够执行。。(这两个复位后仍可以执行)  这是为什么?uboot呢?难道说是我程序中的44b0.ini,vector.s ,sysini.s,这一系列就是uboot?生成的bin就有uboot?(这都是什么跟什么啊?好乱····)

3.bank0对应的是FLASH ,bank6,7是SDRAM,其他的bank是没有外接的是么?

4.ARM上电后不会默认复位寄存器的值,必须通过uboot来初始化值。。。对么???

问题比较多,因为实在比较混淆···看了很多但是还是很不解····希望大家能包涵···多多指点····
谢谢拉
再次谢谢

相关帖子

沙发
xinzha| | 2012-12-22 21:01 | 只看该作者
lz的第一个和第二个问题真想解释明白得相当大篇幅,建议还是自己找找资料看看,其中不明白的再问。

使用特权

评论回复
板凳
mario凯|  楼主 | 2012-12-23 11:41 | 只看该作者
xinzha 发表于 2012-12-22 21:01
lz的第一个和第二个问题真想解释明白得相当大篇幅,建议还是自己找找资料看看,其中不明白的再问。 ...

就是看完很多才觉得乱····思维连不上

使用特权

评论回复
地板
xunchangreng| | 2012-12-23 15:53 | 只看该作者
本帖最后由 xunchangreng 于 2012-12-23 16:17 编辑

第一个:我的印象是在RAM中,你现在使用JLINK是仿真,不是真正的运行程序。
第二个:你运行的是裸机程序,与UBOOT没有任何直接的关系。只有运行操作系统时,才使用到UBOOT
第三个:有的BANK没有使用,有的BANK接的是外围的设备总线。你要仔细看芯片的手册。上面有详细的说明
第四个:ARM上电后只要有复位电路就会复位寄存器,如果运行UBOOT是对相关的寄存器或者链接的总线芯片进行设置,建立符合运行操作系统的条件

常见的ARM嵌入式学习问答,设计者和学习者最关心的10个问题:
1.          ARM嵌入式是学习硬件好还是学习软件好?
2.          嵌入式软件和硬件,哪一种职位待遇更高?或者说,在设计中哪一个更重要?
3.        学完51单片机后,想买ARM开发板继续学习,是买ARM7还是ARM9?
4.        到底是学习哪种内核:ARM7、CORTEX-M3、CORTEX-M4、ARM9、CORTEX-A8还是CORTEX-A9?
5.        ARM芯片如何选择型号?
6.        学习ARM主要学习啥?
7.        是先学习基于操作系统的应用层程序的编程,还是先学习基于操作系统的驱动程序的编程?
8.        一定要学习GUI界面设计吗?
9.        买哪种ARM开发板?
10.        电磁兼容号称黑色艺术,请问如何学习硬件设计中的电磁兼容设计?

1.        ARM嵌入式是学习硬件好还是学习软件好?

     答:

         学习硬件好还是软件好,如果你能精通其中的任何一个,都好!
       学硬件,绝大多数人大学毕业后都可以做硬件设计,这时候大家是一个差不多的水平线上,所以感觉上好像没有门槛!但是电子产品设计的难点是稳定性,尤其是电磁兼容性的设计。N年之后,也许三年,也许五年,也许八年,总之年数不等,这时候水平上就有了高低之分:有些人设计出来的电子产品就是不怎么出问题,有些人设计出来的电子产品就是一直有问题。硬件的设计,是设计经验和理论再学习的结合:电磁场与电磁波、微波与天线、高速信号处理、信号完整性、PCB布线的 实际措施、系统电磁兼容的处理措施、电路调试的能力与解决电路故障的能力,等等,
    学软件,很多人大学毕业后都无法从事这个设计工作,因为大家在学校的努力程度不同,很多人实际上还没有进入编程的门槛内。但是进入门槛后,绝大多数人的水平会处于差不多相同的水平线上,极个别的水平高一些,体现在程序的稳定性和程序运行效率上。软件的设计,主要体现在这两点
    单片机的硬件和软件,因为主频太低,很少出现稳定性的问题,软件的工作量也小,很多单位的软硬件都是一个人做。但是到了主频很高的32位微处理器后,硬件的稳定性特别容易出问题,功能复杂度增大,硬件设计的难度增加了,软件编程的工作量加大了,所以多数公司的软件和硬件开始有多人分开设计。树叶有专攻!大树叶负责系统设计,各种小树叶有的做硬件设计,有的做软件编程。宗旨就是发挥各自的强项!完成最后的系统功能设计

   另外一个需要强调的是,学习硬件还是软件,还要看个人对硬件感兴趣,还是对软件感兴趣?

2.        嵌入式软件和硬件,哪一种职位待遇更高?或者说,在设计中哪一个更重要?

      答:

     刚进入职场时,一般来说嵌入式软件的待遇会稍高一些。因为之前说了,很多人没有进入软件设计的门槛内。但是软件毕竟是青春性的职业,随着年龄的增加和设计经验、设计能力的增加,硬件设计的待遇水涨船高,慢慢会与软件职位的待遇相同甚至高于软件的职位。

     至于谁更重要,硬件相当于躯体,软件相当于血液,缺一不可,没有谁更重要的说法。如果从产品的角度看,硬件更重要一些。因为在产品中出了问题,硬件的稳定性问题基本上只有找高手重新设计,如果是电路原理上的问题还可以直接增加或者减少元件来解决。软件上不稳定问题基本上可以通过修改程序设计并重新下载程序到芯片中来解决。如果从设计的角度看,系统设计更重要,因为系统设计要求懂一些软件的基本设计,更要对硬件设计有相当的造诣,这样他才能把握住系统设计的要求,正确提出设计方案。

3.      学完51单片机后,想买ARM开发板继续学习,是买ARM7还是ARM9?

     答:

       如果你的单片机编程能力比较强,建议直接买ARM9的板子,跑linux系统的,学习嵌入式软件编程。
       如果你的单片机编程能力比较一般,建议先购买CORTEX-M3的开发板,比如盘古STM32开发板和盘古LPC1768开发板,先学习32位ARM的编程(支持轻量级的操作系统,比如UCOS),锻炼实际的编程能力。有了一定的编程能力后,再买ARM9的板子,跑linux系统的,学习嵌入式软件编程。
       总之就是多动手,遇到问题多了慢慢积累起来,就能够融会贯通了!

5.      ARM芯片如何选择型号?

答:

  ST公司:基于CORTEX-M3内核的芯片STM32F103、基于CORTEX-M4内核的芯片STM32F4,是目前最流行的CORTEX-M3内核的芯片。

  N XP公司:基于CORTEX-M3内核的芯片LPC1768、LPC1788、基于CORTEX-M0+内核的芯片LPC800系列,ARM9内核的芯片LPC3250,在设计中的认可率都比较高。

    ATMEL公司:一直采用ARM核心技术,最高也只采用到ARM9技术,旨在打造稳定的工业级芯片,不追求性能上的卓越,但求性能更加的可靠的工业级芯片。能克服各种恶劣的环境,及各种干扰,功耗低,让工业控制能更加稳定有条不紊的进行。现在的ARM9内核芯片有AT91SAM9260、AT91SAM9263、AT91SAM9G45等


       德州仪器TI: 一直致力于研究处理速度更快,功能更加强大的芯片。更是采用ARM最新技术Cortex A8来提升芯片的性能。使得一些芯片的处理速度与X86架构的MCU不分伯仲。但是最近OMAP系列芯片据说被裁了,可能会退出市场。这让选择TI芯片的人心里有点害怕!而且,TI的芯片更新速度太快,让选择他们芯片的厂家也无所适从。现在的CORTEX-A8内核芯片有AM3358、AM3359等。

SAMSUNG半导体: SAMSUNG生产ARM内核芯片的超高性价比是无人能敌的。正因为这点,其芯片也得到很多厂家的亲睐。例如S3C2440性价比极高,一般消费电子产品中应用较多,不适于在严苛的工控环境中使用。现在的ARM9内核芯片有S3C2440、CORTEX-A8内核芯片S5PV210等。

     最近老是看到不少个人和厂家宣传:使用三星的2440或者三星公司的其他型号设计为工控产品,而且我听到不少厂家说芯片的工作温度都做过老化试验,低温可以到零下40度。这个低温的实验条件只是工业级的一个强制性温度试验条件,并不是在这个低温下正常工作就是工控级芯片。工控级的应用真正难以实现的是在各种恶劣电磁环境下的稳定工作,可惜大部分芯片都不能实现这种要求。稳定性是工控级应用的第一要素,这也就是为何ATMEL的芯片很多型号一卖就是十几年,他们的芯片做的就是稳定。比如AT91RM9200.

6.      学习ARM主要学习啥?

答:

   在硬件上主要学习ARM内核芯片的电路设计及其附加外围电路(USB、SDIO、CAN、485、SPI、PCI等)设计以及高速数字信号处理、信号完整性设计、电磁兼容设计,说白了就是学习如何设计出高稳定的ARM系统电路。ARM内核(CORTEX-M3、CORTEX-M4、ARM9、CORTEX-A8、CORTEX-A9等)的芯片,主频越来越高,实现稳定性的设计难度越来越大。
     软件上主要学学习基于操作系统的应用层程序的编程和基于操作系统的驱动程序编程或者基于库函数的裸机程序编程等等。CORTEX-M3、CORTEX-M4内核的芯片,可以运行裸机程序或者轻量级的UCOS系统,软件上主要学习裸机程序的编程; ARM9、CORTEX-A8、CORTEX-A9内核的芯片,可以运行linux操作系统、android操作系统、wince操作系统等,学习基于操作系统的应用程序编程

7.      是先学习基于操作系统的应用层程序的编程,还是先学习基于操作系统的驱动程序的编程?

    答:

          基于操作系统的应用层程序的编程是嵌入式软件设计的基础,它基本上可以不需要熟悉底层硬件就可以完成程序设计,所以学习嵌入式linux应用程序编程买开发板时,只要可以运行linux系统的开发板都可以。。基于操作系统的驱动程序的编程设计,要求设计人员不仅要熟悉操作系统,还要熟悉底层硬件,最好有过基于寄存器的程序编写经历,对设计人员的要求比较高。

        现在的驱动程序的编程设计,芯片原厂大部分已经提供了。在芯片原厂做驱动程序设计的人员,水平会高得多,不过中国的芯片厂很少,大家暂时没多少机会。从产品的设计角度看,驱动程序的设计难度已经降低。

        所以建议:先学习基于操作系统的应用层程序的编程,有了一定的编程经验后再去学习基于操作系统的驱动程序的编程设计。

其他的内容请下载!
常见的ARM嵌入式学习问答-合嵌电子科技公司.pdf (267.43 KB)

使用特权

评论回复
5
xinzha| | 2012-12-23 19:10 | 只看该作者
mario凯 发表于 2012-12-23 11:41
就是看完很多才觉得乱····思维连不上

第一个问题,首先你用的这种方式下程序不是在flash中运行,而是在ram中,至于是sram还是dram要根据不同的cpu和开发板具体问题具体分析。区别在于sram不用软件初始化,而dram必须要初始化dram控制器,如果你在每次复位cpu之后都要运行一个初始化脚本才能调试,那说明你是使用dram在调试,而如果不需要初始化就可以直接通过jtag把程序写下去,那就是用的sram。Jtag可以强行指定pc跳到某个地址执行,在ads或者rvds中设置entry就可以。这个功能在调试的时候非常有用,允许你非常灵活地调试自己的代码。
初始化不是在sdram中,而是直接通过脚本在主机侧控制sdram控制器。
2.Uboot没有任何特殊意义,对于cpu来说它只是一段程序,跟你的流水灯程序一样只是一系列连续的指令而已。只要你自己学的时间够长,研究够深入,自己写个类似于Uboot的程序都可以。至于为什么烧到0地址和0x2000都能执行,这个要看你的项目设置和scatter怎么写的了。

使用特权

评论回复
6
mario凯|  楼主 | 2012-12-27 13:36 | 只看该作者
xinzha 发表于 2012-12-23 19:10
第一个问题,首先你用的这种方式下程序不是在flash中运行,而是在ram中,至于是sram还是dram要根据不同的 ...

  那我想问下,我在JLINK调试的时候是在SDRAM中进行的,映像文件直接从  ARM LINKER设置的起始地址开始,不是从0x0开始的。那么SRAM运行是怎么回事呢?这块没太懂。44B0中有自带的SRAM/CACHE是8KB的,那什么情况是在SRAM中运行的呢?要在提前设置什么呢?

在文件中的写了初始化的44b0ini.s这个是bootloder么?
这个bootloader的bin文件和工程中的44B0INI.S什么关系?
如果有工程中有44B0INI.S是不是就不用烧bootloader了?

麻烦大神再来给我呱唧呱唧
先谢过

使用特权

评论回复
7
zjwyczj| | 2012-12-27 15:57 | 只看该作者
第一个问题:首先你这款芯片是没有内存储器的吧,都得扩展外存储器的吧。你现在0x0c000000扩展的是sdram吧。
① 仿真调试时候RO设哪了,就在哪个地址开始运行了。你的情况肯定是在sdram中运行了。
② 从0x0开始运行程序是系统在上电后,首先执行0x0地址处的指令(现在有些处理器已经不一定必须在0x0了)。这个要跟仿真调试区分开来。
③ 关于对SDRAM初始化,如果要在SDRAM中运行程序,再把程序重固化的存储器搬运到sdram之前必须先初始化sdram。就是在启动文件中初始化sdram。
现在你的问题是应该是先初始化sdram才能在sdram运行,但是一开始就在sdram开始调试的,这样就造成矛盾了。首先仿真调试在sdram中运行跟板子脱离仿真器在sdram中执行代码应该是不一样的。JTAG仿真调试时是不需要存储器的,所以调试时所谓的在sdram中运行,其实不是真正的在sdram芯片中运行。这样解释不知道你可以明白吗。这个问题我以前也是纠结了很久。如有不对,也请高手们指出来啊。
再发你个文档,看了之后你对jtag仿真调试原理应该会有个认识。

使用特权

评论回复
8
zjwyczj| | 2012-12-27 16:20 | 只看该作者
第二个问题
① uboot只是一段引导程序,可由可无
② 你烧录程序的只是加载地址,你程序的运行域(你的运行地址)在编译器中已经设定了再0x0开始执行,那就在0x0处开始执行。加载域跟运行域是独立的。这个你把程序烧0x2000干嘛,做这种无意义的事。不过有疑问,善于去思考这点不错。
③ vector.s和sysini.s这两个是启动文件啊。你好好去看看启动文件是什么。vector.s里面应该是异常中断向量表,跟异常处理程序。sysini.s应该是系统复位后的处理,各种初始化。

使用特权

评论回复
9
zjwyczj| | 2012-12-27 16:23 | 只看该作者
第三个问题:看你具体的目标板啊,有没接。
第四个问题:uboot可由可无,一定要跟uboot挂上钩干嘛,好好看看启动文件的功能。

使用特权

评论回复
10
zjwyczj| | 2012-12-27 16:25 | 只看该作者
回答如有不对的地方,有高手帮我纠正下啊,其实我也是菜鸟,搞的时间不长。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

19

帖子

1

粉丝