分类目录归档:MCU

嵌入式设计之:初学扫盲场

导语:

软硬结合才是王道!

搞了10多年的软件,始终抱有对底层机制的极大兴趣,不可避免的凯觎起硬件的地盘。苦于没有机会接触硬件设计方面的东西,所以只是纸上“看”兵,更别说动手做了。最近做了一些modbus协议方面的软件,加之对Linux还算比较熟悉,遂产生了使用硬件实现modbus数据集合的想法。

临渊羡鱼不如退而结网,说做就做吧,此时不动手更待老死墓中?

一、MUC简介和选型:RAM or Flash

一度分不清MCU中的Flash和RAM充当什么角色。

实际上,MCU中的RAM相当于PC的内存,程序都是装在在这里供MCU执行单元执行的。而Flash相当于PC的硬盘,如果是裸奔,那么写的固件都是烧在这个Flash里面的。MCU中的Flash一般都很小,只有几十K或者几百K,一度以为Flash才是内存或者二级缓存啥的,汗。

如果你规划中的系统需要运行Linux,那么你需要给它加个“硬盘”,而读写硬盘的地址就是通过Flash来映射的。具体的可能在后面会涉及到。

RAM:MCU的片上内存;

FLASH:MCU的片上“硬盘”,有擦写次数限制,一般为10^4次;

EEPROM:用来存储参数的区域,据说可以用Flash模拟EERPOM;

SRAM:通俗讲,就是扩展的内存。

二、电路设计:自定义元件库

有些元件在库中是找不到的,比如新出的MCU。这个时候只有自己做了,方法是在orCAD Capture中新建Library,制作完毕后就可以在电路设计时使用。

但是我碰到一个悲催的问题,设计完元件图,然后在电路设计时使用,添加完元件后,缺发现有个地方不对,需要到元件库中修改此元件,改完之后,再在电路设计图中使用,却总是提示:

Part is out of date with respect to the design cache.use update cache to synchronize the part in the cache with the library.

郁闷的是此问题卡了我两天!

解决俄方法也很简单,网上查到的(悲催的百度只能搜国内的内容,而且基本都是广告,真的是一点用的没有,纯粹一个无赖废物。今天在打开google主页之前默认三遍上帝保佑,还真打开了,感谢上帝顾念苍生!):

选择File目录树,点file.dsn前面的”+”,再点Design Cache前面的”+”,找到你所出错的Part名称,右击,Update一下,问题解决!!!

 

STM32 keil mdk启动代码分析

;// <h> Stack Configuration
;//   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;// </h>
Stack_Size      EQU     0x00000200                           ;//定义堆栈大小
AREA    STACK, NOINIT, READWRITE, ALIGN=3    ;//定义一个数据段 按8字节对齐
    ;//AREA 伪指令用于定义一个代码段或数据段 NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0Stack_Mem       SPACE   Stack_Size                           ;//保留Stack_Size大小的堆栈空间 分 配连续 Stack_Size 字节的存储单元并初始化为 0

__initial_sp                                                 ;//标号,代表堆栈顶部地址,后面有用

;// <h> Heap Configuration
;//   <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;// </h>
Heap_Size       EQU     0x00000020                            ;//定义堆空间大小
AREA    HEAP, NOINIT, READWRITE, ALIGN=3      ;//定义一个数据段,8字节对齐
__heap_base
Heap_Mem        SPACE   Heap_Size                             ;//保留Heap_Size的堆空间
__heap_limit                                                  ;//标号,代表堆末尾地址,后面有用

PRESERVE8                                     ;//指示编译器8字节对齐
THUMB                                         ;//指示编译器为THUMB指令

; Vector Table Mapped to Address 0 at Reset
AREA    RESET, DATA, READONLY                  ;//定义只读数据段,其实放在CODE区,位于0地址

EXTERN NMIException
EXTERN HardFaultException
EXTERN MemManageException
EXTERN BusFaultException
EXTERN UsageFaultException
EXTERN SVCHandler
EXTERN DebugMonitor
EXTERN PendSVC
EXTERN SysTickHandler               ;//声明这些符号在外部定义,同C
;//在××it.c中实现这些函数 ,中断就能自动调用了
EXPORT __Vectors
EXPORT __initial_sp                     ;//EXPORT:在程序中声明一个全局的标号__Vectors,该标号可在其他的文件中引用
;//IMPORT:伪指令用于通知编译器要使用的标号在其他的源文件中定义,
;//但要在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的符号表中

__Vectors       DCD     __initial_sp              ;// Top of Stack         //Cotex-M 要求此处为堆栈顶部地址
DCD     Reset_Handler                ;// Reset Handler
DCD     NMIException                   ;// NMI Handler
DCD     HardFaultException        ;// Hard Fault Handler
DCD     MemManageException        ;// MPU Fault Handler
DCD     BusFaultException         ;// Bus Fault Handler
DCD     UsageFaultException       ;// Usage Fault Handler
DCD     0                         ;// Reserved
DCD     0                         ;// Reserved
DCD     0                         ;// Reserved
DCD     0                         ;// Reserved
DCD     SVCHandler                ;// SVCall Handler
DCD     DebugMonitor              ;// Debug Monitor Handler
DCD     0                         ;// Reserved
DCD     PendSVC                   ;// PendSV Handler
DCD     SysTickHandler            ;// SysTick Handler      //一大堆的异常处理函数地址
;// External Interrupts
EXTERN WWDG_IRQHandler
EXTERN PVD_IRQHandler
EXTERN TAMPER_IRQHandler
EXTERN RTC_IRQHandler
EXTERN FLASH_IRQHandler
EXTERN RCC_IRQHandler
EXTERN EXTI0_IRQHandler
EXTERN EXTI1_IRQHandler
EXTERN EXTI2_IRQHandler
EXTERN EXTI3_IRQHandler
EXTERN EXTI4_IRQHandler
EXTERN DMAChannel1_IRQHandler
EXTERN DMAChannel2_IRQHandler
EXTERN DMAChannel3_IRQHandler
EXTERN DMAChannel4_IRQHandler
EXTERN DMAChannel5_IRQHandler
EXTERN DMAChannel6_IRQHandler
EXTERN DMAChannel7_IRQHandler
EXTERN ADC_IRQHandler
EXTERN USB_HP_CAN_TX_IRQHandler
EXTERN USB_LP_CAN_RX0_IRQHandler
EXTERN CAN_RX1_IRQHandler
EXTERN CAN_SCE_IRQHandler
EXTERN EXTI9_5_IRQHandler
EXTERN TIM1_BRK_IRQHandler
EXTERN TIM1_UP_IRQHandler
EXTERN TIM1_TRG_COM_IRQHandler
EXTERN TIM1_CC_IRQHandler
EXTERN TIM2_IRQHandler
EXTERN TIM3_IRQHandler
EXTERN TIM4_IRQHandler
EXTERN I2C1_EV_IRQHandler
EXTERN I2C1_ER_IRQHandler
EXTERN I2C2_EV_IRQHandler
EXTERN I2C2_ER_IRQHandler
EXTERN SPI1_IRQHandler
EXTERN SPI2_IRQHandler
EXTERN USART1_IRQHandler
EXTERN USART2_IRQHandler
EXTERN USART3_IRQHandler
EXTERN EXTI15_10_IRQHandler
EXTERN RTCAlarm_IRQHandler
EXTERN USBWakeUp_IRQHandler                    ;//同上,

DCD     WWDG_IRQHandler           ;// Window Watchdog
DCD     PVD_IRQHandler            ;// PVD through EXTI Line detect
DCD     TAMPER_IRQHandler         ;// Tamper
DCD     RTC_IRQHandler            ;// RTC
DCD     FLASH_IRQHandler          ;// Flash
DCD     RCC_IRQHandler            ;// RCC
DCD     EXTI0_IRQHandler          ;// EXTI Line 0
DCD     EXTI1_IRQHandler          ;// EXTI Line 1
DCD     EXTI2_IRQHandler          ;// EXTI Line 2
DCD     EXTI3_IRQHandler          ;// EXTI Line 3
DCD     EXTI4_IRQHandler          ;// EXTI Line 4
DCD     DMAChannel1_IRQHandler    ;// DMA Channel 1
DCD     DMAChannel2_IRQHandler    ;// DMA Channel 2
DCD     DMAChannel3_IRQHandler    ;// DMA Channel 3
DCD     DMAChannel4_IRQHandler    ;// DMA Channel 4
DCD     DMAChannel5_IRQHandler    ;// DMA Channel 5
DCD     DMAChannel6_IRQHandler    ;// DMA Channel 6
DCD     DMAChannel7_IRQHandler    ;// DMA Channel 7
DCD     ADC_IRQHandler            ;// ADC
DCD     USB_HP_CAN_TX_IRQHandler ;// USB High Priority or CAN TX
DCD     USB_LP_CAN_RX0_IRQHandler ;// USB Low Priority or CAN RX0
DCD     CAN_RX1_IRQHandler        ;// CAN RX1
DCD     CAN_SCE_IRQHandler        ;// CAN SCE
DCD     EXTI9_5_IRQHandler        ;// EXTI Line 9..5
DCD     TIM1_BRK_IRQHandler       ;// TIM1 Break
DCD     TIM1_UP_IRQHandler        ;// TIM1 Update
DCD     TIM1_TRG_COM_IRQHandler   ;// TIM1 Trigger and Commutation
DCD     TIM1_CC_IRQHandler        ;// TIM1 Capture Compare
DCD     TIM2_IRQHandler           ;// TIM2
DCD     TIM3_IRQHandler           ;// TIM3
DCD     TIM4_IRQHandler           ;// TIM4
DCD     I2C1_EV_IRQHandler        ;// I2C1 Event
DCD     I2C1_ER_IRQHandler        ;// I2C1 Error
DCD     I2C2_EV_IRQHandler        ;// I2C2 Event
DCD     I2C2_ER_IRQHandler        ;// I2C2 Error
DCD     SPI1_IRQHandler           ;// SPI1
DCD     SPI2_IRQHandler           ;// SPI2
DCD     USART1_IRQHandler         ;// USART1
DCD     USART2_IRQHandler         ;// USART2
DCD     USART3_IRQHandler         ;// USART3
DCD     EXTI15_10_IRQHandler      ;// EXTI Line 15..10
DCD     RTCAlarm_IRQHandler       ;// RTC Alarm through EXTI Line
DCD     USBWakeUp_IRQHandler      ;// USB Wakeup from suspend   ;//同上

AREA    |.text|, CODE, READONLY        ;//定义代码段

; Reset Handler
Reset_Handler   PROC                              ;//过程的开始
;//Rset_Handler的实现   利用PROC、ENDP这一对伪指令把程序段分为若干个过程,使程序的结构加清晰

EXPORT Reset_Handler             [WEAK]    ;//在外部没有定义该符号时导出该符号,见HELP中[WEAK]
IMPORT __main                              ;//导入符号,__main为 运行时库提供的函数;完成堆栈,堆的初始话
LDR     R0, =__main                         ;//等工作,会调用下面定义的__user_initial_stackheap;
BX      R0                                  ;//跳到__main,进入C的世界
ENDP                                      ;过程的结束

ALIGN

; User Initial Stack & Heap
IF      :DEF:__MICROLIB                     ;//如果使用micro lib,micro lib 描述见armlib.chm

EXPORT __heap_base
EXPORT __heap_limit                        ;//只导出几个定义

ELSE                                        ;//如果使用默认C运行时库

IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap
__user_initial_stackheap                                    ;//则进行堆栈和堆的赋值,在__main函数执行过程中调用。
LDR     R0, = Heap_Mem
LDR     R1, =(Stack_Mem + Stack_Size)
LDR     R2, = (Heap_Mem + Heap_Size)
LDR     R3, = Stack_Mem
BX      LR
ALIGN
ENDIF

END                                         ;//OK ,完了

 

Processor of the iPods

What processor do the iPod, iPod mini, iPod nano, iPod touch, and iPod shuffle models use?

Apple provides no official information regarding the processors used to power the iPod models.

Starting with the iPod nano 2nd Gen, the company has gone as far as having the processor custom branded with an Apple logo to make it more difficult to determine its origins. However, the below chart is believed to be accurate.

iPod Name Processor Details
iPod (Original/Scroll) PP5002 PortalPlayer PP5002 “system on a chip” with dual embedded 90 MHz ARM 7TDMI processors.
iPod 2nd Gen PP5002  
iPod 3rd Gen 10/15/30 PP5002  
iPod 3rd Gen 10/20/40 PP5002  
iPod 3rd Gen 15/20/40 PP5002  
iPod 4th Gen ClickWheel PP5020 PortalPlayer PP5020 “system on a chip” with dual embedded variable speed 80 MHz ARM 7TDMI processors.
iPod U2 4th Gen PP5020  
iPod photo (30) PP5020  
iPod photo (40/60) PP5020  
iPod Color Display PP5020  
iPod U2 Edition (Color) PP5020  
iPod mini PP5020  
iPod mini 2nd Gen PP5020  
iPod 5th Gen (Video) PP5021C PortalPlayer PP5021C “system on a chip” with dual embedded variable speed 80 MHz ARM 7TDMI processors. For video decoding, these models use a Broadcom VideoCore BCM2722 processor.
iPod U2 5th Gen PP5021C  
iPod 5th Gen – Enhanced PP5021C The “Enhanced” 5th Gen iPod models are believed to use the same processors as the 5th Gen models.
iPod U2 5th Gen Enh. PP5021C  
iPod classic 6th Gen Samsung ARM Apple provides no information on the processor used in the iPod classic (6th Gen) models, but it uses an Apple branded processor, believed to be a Samsung ARM. For more information, please refer to iFixit’s disassembly guide.
iPod classic (2008) Samsung ARM Apple provides no information on the processor used in the iPod classic (6th Gen/Late 2008) models, but it uses an Apple branded processor, believed to be a Samsung ARM like its predecessor.
iPod nano PP5021C PortalPlayer PP5021C “system on a chip” with dual embedded 80 MHz ARM 7TDMI processors.
iPod nano 2nd Gen Samsung ARM Apple provides no information on the processor used in the iPod nano 2nd Gen models, but each uses an Apple branded processor, believed to be a Samsung ARM. For in-depth speculation regarding all of the chips used, please refer to ArsTechnica’s iPod nano 2nd Gen “autopsy.”
iPod nano 2nd Gen RED Samsung ARM  
iPod nano 3rd Gen/Fat Samsung ARM Apple provides no information on the processor used in the iPod nano 3rd Gen models, but each uses an Apple branded processor, believed to be a Samsung ARM. For more information, please refer to iFixit’s disassembly guide.
iPod nano 4th Gen Samsung ARM Apple provides no information on the processor used in the iPod nano 4th Gen models, but each uses an Apple branded processor, believed to be a Samsung ARM. For more information, please refer to iFixit’s disassembly guide.
iPod nano 5th Gen Samsung ARM Apple provides no information on the processor used in the iPod nano 5th Gen models, but each uses an Apple branded processor, believed to be a Samsung ARM. For more information, please refer to iFixit’s disassembly guide.
iPod nano 6th Gen Samsung ARM Apple provides no information on the processor used in the iPod nano 6th Gen models, but it is believed to use a Samsung ARM like its predecessors.
iPod shuffle STMP 3550 Uses a 75 MHz SigmaTel D-Major STMP 3550 processor.
iPod shuffle 2nd Gen Samsung ARM Apple provides no information on the processor used in the iPod shuffle 2nd Gen models, but it uses an Apple branded processor, believed to be a Samsung ARM. For more information, please refer to iFixit’s “teardown.”
iPod shuffle 3rd Gen Samsung ARM Apple provides no information on the processor used in the iPod shuffle 3rd Gen models, but it uses an Apple branded processor, believed to be a Samsung ARM. For more information, please refer to iFixit’s “teardown.”
iPod shuffle 3rd Gen Color Samsung ARM Apple provides no information on the processor used in the iPod shuffle 3rd Gen (Colors) models, but it uses an Apple branded processor, believed to be a Samsung ARM. For more information, please refer to iFixit’s “teardown.”
iPod shuffle 4th Gen Samsung ARM Apple provides no information on the processor used in the iPod shuffle 4th Generation models, but it uses an Apple branded processor, believed to be a Samsung ARM.
iPod touch Samsung ARM Apple provides no information on the processor used in the iPod touch models, but it uses an Apple branded processor, believed to be a Samsung ARM running at 400 MHz. For more information, please refer to iFixit’s disassemblyguide.
iPod touch 2nd Gen Samsung ARM Apple provides no information on the processor used in the iPod touch 2nd Gen models, but third-party “teardowns” indicate that it uses an Apple branded Samsung ARM processor running at 533 MHz. For more information, please refer to iFixit’s disassemblyguide.
iPod touch 3rd Gen Samsung ARM Apple provides no information on the processor used in the iPod touch 3rd Gen models, but third-party “teardowns” indicate that the 32 GB and 64 GB configurations use an Apple branded Samsung ARM processor running at 800 MHz. For more information, please refer to iFixit’s disassemblyguide.
iPod touch 4th Gen Apple A4 Like the original iPad and iPhone 4, the iPod touch (4th Generation) uses a custom ARM-based “system on a chip” that Apple refers to as an “Apple A4” processor. It integrates the CPU, graphics, the memory controller, and I/O functions.
iPod touch “4.5” Gen Apple A4 The iPod touch “4.5” Gen uses the same Apple A4 processor as the 4th Gen model.

Should you have additional, or alternate, information about the processors used in the iPod please share.

ARM处理器芯片选型指南

  要选好一款处理器,要考虑的因素很多,不单单是纯粹的硬件接口,还需要考虑相关的操作系统、配套的开发工具、仿真器,以及工程师微处理器的经验和软件支持情况等。微处理器选型是否得当,将决定项目成败。当然,并不是说选好微处理器,就意味着成功,因为项目的成败取决于许多因素;但可以肯定的一点是,微处理器选型不当,将会给项目带来无限的烦恼,甚至导致项目的流产。

  1 嵌入式微处理器选型的考虑因素

在产品开发中,作为核心芯片的微处理器,其自身的功能、性能、可靠性被寄予厚望,因为它的资源越丰富、自带功能越强大,产品开发周期就越短,项目成功率就越高。但是,任何一款微处理器都不可能尽善尽美,满足每个用户的需要,所以这就涉及选型的问题。

(1)应用领域

一个产品的功能、性能一旦定制下来,其所在的应用领域也随之确定。应用领域的确定将缩小选型的范围,例如:工业控制领域产品的工作条件通常比较苛刻,因此对芯片的工作温度通常是宽温的,这样就得选择工业级的芯片,民用级的就被排除在外。目前,比较常见的应用领域分类有航天航空、通信、计算机、工业控制、医疗系统、消费电子、汽车电子等。

(2)自带资源

经常会看到或听到这样的问题:主频是多少?有无内置的以太网MAC?有多少个I/O口?自带哪些接口?支持在线仿真吗?是否支持OS,能支持哪些OS?是否有外部存储接口?……以上都涉及芯片资源的问题,微处理器自带什么样的资源是选型的一个重要考虑因素。芯片自带资源越接近产品的需求,产品开发相对就越简单。

(3)可扩展资源

硬件平台要支持OS、RAM和ROM,对资源的要求就比较高。芯片一般都有内置RAM和ROM,但其容量一般都很小,内置512 KB就算很大了,但是运行OS一般都是兆级以上。这就要求芯片可扩展存储器。

(4)功 耗

单看“功耗”是一个较为抽象的名词。这里举几个形象的例子:

①夏天使用空调时,家里的电费会猛增。这是因为空调是高功耗的家用电器,这时人们会想,“要是空调能像日光灯那样省电就好了”。

②随身的MP3、MP4都使用电池。正当听音乐看视频时,系统因为没电自动关机,谁都会抱怨“又没电了!”

③目前手机一般使用锂电池,手机的待机和通话时间成了人们选择手机的重要指标。待机及通话时间越长,电池的使用寿命就可以提高,手机的寿命也相对提高了。

以上体现了人们对低功耗的渴求。低功耗的产品即节能又节财,甚至可以减少环境污染,它有如此多的优点,因此低功耗也成了芯片选型时的一个重要指标。

(5)封 装

常见的微处理器芯片封装主要有QFP、BGA两大类型。BGA类型的封装焊接比较麻烦,一般的小公司都不会焊,但BGA封装的芯片体积会小很多。如果产品对芯片体积要求不严格,选型时最好选择QFP封装。

(6)芯片的可延续性及技术的可继承性

目前,产品更新换代的速度很快,所以在选型时要考虑芯片的可升级性。如果是同一厂家同一内核系列的芯片,其技术可继承性就较好。应该考虑知名半导体公司,然后查询其相关产品,再作出判断。

(7)价格及供货保证

芯片的价格和供货也是必须考虑的因素。许多芯片目前处于试用阶段(Sampling),其价格和供货就会处于不稳定状态,所以选型时尽量选择有量产的芯片。

(8)仿真器

仿真器是硬件和底层软件调试时要用到的工具,开发初期如果没有它基本上会寸步难行。选择配套适合的仿真器,将会给开发带来许多便利。对于已经有仿真器的人们,在选型过程中要考虑它是否支持所选的芯片。

(9)OS及开发工具

作为产品开发,在选型芯片时必须考虑其对软件的支持情况,如支持什么样的OS等。对于已有OS的人们,在选型过程中要考虑所选的芯片是否支持该OS,也可以反过来说,即这种OS是否支持该芯片。

(10)技术支持

现在的趋势是买服务,也就是买技术支持。一个好的公司的技术支持能力相对比较有保证,所以选芯片时最好选择知名的半导体公司。

另外,芯片的成熟度取决于用户的使用规模及使用情况。选择市面上使用较广的芯片,将会有比较多的共享资源,给开发带来许多便利.

  2 ARM公司及相关产品介绍

ARM公司于1991年成立于英国剑桥,主要出售ARM IP的授权。目前,ARM处理器(即采用ARM IP核的处理器)已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场。ARM处理器应用占据了32位RISC微处理器很大的市场,ARM技术已渗入生活的各个方面。

目前市面上常见的ARM处理器架构可分为ARM7、ARM9、ARM10、ARM11以及Cortex系列,每个系列又包括很多种IP内核的产品。ARM 也是嵌入式处理器中首先推出多核架构的厂商。生产ARM芯片的厂家很多,主流半导体厂商的产品比较齐全,供货也相对更有保障。Samsung、NXP、 Cirrus Logic、Atmel、Freescale、TI、ST、Winbond等主流半导体厂商的ARM芯片产品列表见本刊网站,其中有些产品已供货,有些正在样片阶段,有些正在开发,还有许多产品不支持外部存储器的扩展。

  3 嵌入式微处理器选型示例

(1)需 求

①适合于工业控制的温度。

②支持VxWorks、Linux操作系统。

③存储方面,SDRAM大于16 MB,Flash大于8 MB。

④主频方面,60 MHz以上。

⑤接口方面具有带DMA控制的Ethernet MAC、2个以上RS232串口、1个USB 2.O接口、1个SPI接口,以及大于30个GPIO引脚(不包括数据总线、地址总线和CPU内置接口总线)。

⑥提供实时时钟或实时定时器。

⑦引脚封装为QFP。

⑧价格为<200元。

(2)选型需求分析

根据需求①,参照前述选购的考虑因素中的“应用领域”,把要选的芯片定位于工业控制领域。目前市场上生产较适合用于作工业控制的微处理器的半导体公司有 NXP、Atmel、ST公司(Samsung公司的产品较适合用于PDA、多媒体产品,Cirrus Logic公司的产品较适合音频产品。)根据需求②,参照选购的考虑因素中的“OS及开发工具”,VxWorks5.5对于ARM核支持到V5T架构,所以把选型范围缩小到ARM7和ARM9系列。由于需要支持Linux操作系统,所以最好选择带有MMU的内核,因为不带MMU内核(ARM7TMDI)支持的Linux操作系统非常有限,只能支持UCLinux。

根据需求③,结合各种型号的芯片资源介绍,不难看出要求芯片必须带有可扩展存储接口,因为芯片的内置存储量不可能那么大。所以只能选择带可扩展存储接口的芯片。NXP公司的LPC2400系列和LH7A具备此项功能,Atmel公司的AT91SAM7SE系列、AT91RM9200、AT91SAM9系列也满足此项需求。

根据需求④、⑤、⑥、⑦,参照选购的考虑因素中的“价格及供货保证”,结合NXP、Atmel公司的芯片资源介绍,把选型范围框定在LPC2468 (LPC2400系列中的其他产品要么处于样片阶段,要么处于开发阶段,而LH7A资源不满足要求)、AT91RM9200和AT91SAM9260 (AT91SAM7SE系列处理速度太慢,AT91SAM9261和AT91SAM9263封装不满足需求)型号上。根据需求⑧,上一步所选的3个型号都能满足要求。

(3)选型结论

综合需求和芯片各方面的资源,选型结论如下:

①从产品开发周期角度考虑,AT91RM9200最为适合,它在这4个芯片中开发周期应该最短;

②从技术可继承性角度考虑,且对开发周期没有严格限制的话,AT91SAM9260较为合适;

③如果单支持VxWorks,对Linux支持要求不高,且对开发周期没有严格限制的话,LPC2468较为合适;

④综合各方面考虑,STR912排在其他三者之后。

选型满意度从高到低的排列顺序是:AT91RM9200、AT91SAM9260、LPC2468、STR912。

2011年11月09日 17:18 来源:本站整理 作者:秩名

原址:http://www.elecfans.com/emb/arm/20111109240239_2.html

iSuppli: iPod Nano 材料费才 $43.73

  新款iPod nano改用了触摸屏,但却去掉了上代的视频摄像头和传统的转盘操作,闪存容量最少也仅为8GB。事实上自从2008年NAND闪存价格不再大幅下跌以来,苹果就放弃了每代容量翻番的做法。苹果iPod nano 6代成本分析:为售价三成

 苹果的产品总是在备受关注的同时也饱受争议,比如苹果上个月发布的新产品ipod nano第六代,目前iSuppli分析认为:这个小东西凭借精巧的尺寸、低廉的成本、丰富的功能,再次验证了那句传统格言:“少即是多”(Less is More)。经过细致分析,iSupplli认为新款触摸屏iPod nano 8GB版本的物料成本(BOM)为43.73美元,只比第四代的40.80美元略贵一些,在历代iPod产品中是第二低廉的。

  iSuppli首席分析师、拆解服务经理Andrew Rassweiler指出:“很多品牌的最新产品都是拼命增加功能,但是苹果的第六代iPod却维持甚至移除了部分属性,以满足尺寸和功能的需要。这让苹 果拥有了最小巧的iPod,不但有触摸屏,还严格限制了元件成本。

  第六代iPod nano 8GB物料成本一览:

  - 存储芯片(东芝8GB MLC NAND和三星512Mb Mobile DDR):14.40美元

  - 显示和触摸屏模块:11.50美元

  - 应用处理器(三星APL3278A01/ARM架构)和相关DRAM:4.95美元

  - 用户界面(Cirrus Logic音频编码器、意法半导体加速计、Cypress半导体触摸屏控制器、Silicon Laboratories FM收音机、Intersil视频驱动等等):3.49美元

  - 附件(耳机、USB数据线、包装、说明书):2.42美元

  - 机械元件(金属、塑料等等):2.00美元

  - 电源管理(Dialog电源管理电路、MOSFET、二极管等等):1.33美元

  - 电子机械元件(PCB、接头等等):0.89美元

  - 电池(锂离子聚合物):0.70美元

  - 其他:2.05美元

  如果再算上1.37美元的制造成本,第六代iPod nano 8GB的总成本将为45.10美元,相当于建议零售价149美元的30%。

文/驱动之家

DevKit8000启动日志

周一到周五要上班,小孩子就我妈妈一个人照顾。老人家老了,不方便出去,所以小孩子很少能晒到太阳,哎,头疼的问题……

所以啊,周末得花多半时间陪陪孩子,带孩子出去走走,个人时间真是少啊……

今晚把玩了一下DevKit8000开发板,Linux的启动日志如下:

Texas Instruments X-Loader 1.41Starting OS Bootloader…

U-Boot 1.3.3-svn (Feb  6 2010 – 16:29:12)
OMAP3530-GP rev 2, CPU-OPP2 L3-165MHz

OMAP3 DevKit8000 Board + LPDDR/NAND

DRAM:  256 MB

NAND:  256 MiB

Using default environment
In:    serial

Out:   serial

Err:   serial

Hit any key to stop autoboot:  0
NAND read: device 0 offset 0x280000, size 0x240000 

2359296 bytes read: OK##

Booting kernel from Legacy Image at 80300000 …  

 Image Name:   Linux-2.6.28-rc9-omap1  

 Image Type:   ARM Linux Kernel Image (uncompressed)  

Data Size:    2165084

Texas Instruments X-Loader 1.41
Starting OS Bootloader…
U-Boot 1.3.3-svn (Feb  6 2010 – 16:29:12)

OMAP3530-GP rev 2, CPU-OPP2 L3-165MHz
OMAP3 DevKit8000 Board + LPDDR/NAND
DRAM:  256 MB
NAND:  256 MiB
Using default environment

In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0

NAND read: device 0 offset 0x280000, size 0x240000
 2359296 bytes read: OK
## Booting kernel from Legacy Image at 80300000 …
   Image Name:   Linux-2.6.28-rc9-omap1
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2165084 Bytes =  2.1 MB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum … OK
   Loading Kernel Image … OK
OK

Starting kernel …

Uncompressing Linux…………………………………………………….
…………………………………………………………………….
done, booting the kernel.
Linux version 2.6.28-rc9-omap1 (cyz@TIOP) (gcc version 4.2.1 (CodeSourcery Sourc
ery G++ Lite 2007q3-51)) #1 Wed Feb 24 15:49:35 CST 2010
CPU: ARMv7 Processor [411fc083] revision 3 (ARMv7), cr=10c5387f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: OMAP3 DevKit8000 Board
Memory policy: ECC disabled, Data cache writeback
OMAP3430 Unknown revision

SRAM: Mapped pa 0x40200000 to va 0xd7000000 size: 0x100000
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 65024
Kernel command line: console=ttyS2,115200n8 ubi.mtd=4 root=ubi0:rootfs rootfstyp
e=ubifs video=omapfb:mode:4.3inch_LCD
Clocking rate (Crystal/DPLL/ARM core): 26.0/266/500 MHz
GPMC revision 5.0
IRQ: Found an INTC at 0xd8200000 (revision 4.0) with 96 interrupts
Total of 96 interrupts on 1 active controller
OMAP34xx GPIO hardware version 2.5
PID hash table entries: 1024 (order: 10, 4096 bytes)
OMAP clockevent source: GPTIMER12 at 32768 Hz
Console: colour dummy device 80×30
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 128MB 128MB = 256MB total
Memory: 255104KB available (3980K code, 355K data, 156K init)
Calibrating delay loop… 507.32 BogoMIPS (lpj=1982464)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 288 bytes
NET: Registered protocol family 16
Found NAND on CS0
Registering NAND on CS0
omap3evmdc: Driver registration complete
OMAP DMA hardware revision 4.0
USB: No board-specific platform config found
OMAP DSS rev 2.0
OMAP DISPC rev 3.0
OMAP VENC rev 2
i2c_omap i2c_omap.1: bus 1 rev3.12 at 2600 kHz
twl4030: PIH (irq 7) chaining IRQs 368..375
twl4030: power (irq 373) chaining IRQs 376..383
twl4030: gpio (irq 368) chaining IRQs 384..401
i2c_omap i2c_omap.2: bus 2 rev3.12 at 400 kHz
i2c_omap i2c_omap.3: bus 3 rev3.12 at 400 kHz
SCSI subsystem initialized
twl4030_usb twl4030_usb: Initialized TWL4030 USB module
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=0
musb_hdrc: USB OTG mode controller at d80ab000 using DMA, IRQ 92
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP reno registered
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
VFS: Disk quotas dquot_6.5.1
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
JFFS2 version 2.2. (NAND) 漏 2001-2006 Red Hat, Inc.
msgmni has been set to 498
alg: No test for stdrng (krng)
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
Serial: 8250/16550 driver4 ports, IRQ sharing enabled
serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654
serial8250.0: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654
serial8250.0: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654
console [ttyS2] enabled
brd: module loaded
loop: module loaded
PPP generic driver version 2.4.2
PPP Deflate Compression module registered
PPP BSD Compression module registered
PPP MPPE Compression module registered
NET: Registered protocol family 24
PPPoL2TP kernel driver, V1.0
dm9000 Ethernet Driver, V1.31
eth0: dm9000a at d08ae000,d08b2400 IRQ 185 MAC: 00:11:22:33:44:55 (chip)
Linux video capture interface: v2.00
tvp514x 2-005d: Registered to v4l2 master omap34xxcam!!
i2c /dev entries driver
Driver ‘sd’ needs updating – please use bus_type methods
omap2-nand driver initializing
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xba (Micron NAND 256MiB 1,8V 16-bi
t)
cmdlinepart partition parsing not available
Creating 5 MTD partitions on “omap2-nand”:
0x00000000-0x00080000 : “X-Loader”
0x00080000-0x00260000 : “U-Boot”
0x00260000-0x00280000 : “U-Boot Env”
0x00280000-0x00680000 : “Kernel”
0x00680000-0x10000000 : “File System”
UBI: attaching mtd4 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI: attached mtd4 to ubi0
UBI: MTD device name:            “File System”
UBI: MTD device size:            249 MiB
UBI: number of good PEBs:        1996
UBI: number of bad PEBs:         0
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     1
UBI: available PEBs:             0
UBI: total number of reserved PEBs: 1996
UBI: number of PEBs reserved for bad PEB handling: 19
UBI: max/mean erase counter: 2/0
usbmon: debugfs is not available
ehci_hcd: USB 2.0 ‘Enhanced’ Host Controller (EHCI) Driver
ehci-omap ehci-omap.0: OMAP-EHCI Host Controller
UBI: background thread “ubi_bgt0d” started, PID 396
ehci-omap ehci-omap.0: new USB bus registered, assigned bus number 1
ehci-omap ehci-omap.0: irq 77, io mem 0x48064800
ehci-omap ehci-omap.0: USB 2.0 started, EHCI 1.00
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 3 ports detected
Initializing USB Mass Storage driver…
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
g_ether gadget: using random self ethernet address
g_ether gadget: using random host ethernet address
usb0: MAC 6a:01:8d:f5:2a:30
usb0: HOST MAC 12:a5:ad:b2:c8:67
g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
g_ether gadget: g_ether ready
musb_hdrc musb_hdrc: MUSB HDRC host driver
musb_hdrc musb_hdrc: new USB bus registered, assigned bus number 2
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
input: omap_twl4030keypad as /class/input/input0
input: gpio-keys as /class/input/input1
ads7846 spi2.0: touchscreen, irq 187
input: ADS784x Touchscreen as /class/input/input2
twl4030_rtc twl4030_rtc: rtc core: registered twl4030_rtc as rtc0
twl4030_rtc twl4030_rtc: Power up reset detected.
twl4030_rtc twl4030_rtc: Enabling TWL4030-RTC.
Registered led device: led1
Registered led device: led2
Registered led device: ledB
Registered led device: led3
usbcore: registered new interface driver usbhid
usbhid: v2.6:USB HID core driver
Advanced Linux Sound Architecture Driver Version 1.0.18rc3.
ASoC version 0.13.2
OMAP3 omap3devkit8000 SoC init
TWL4030 Audio Codec init
asoc: twl4030 <-> omap-mcbsp-dai-(link_id) mapping ok
ALSA device list:
  #0: omap3devkit8000 (twl4030)
TCP cubic registered
NET: Registered protocol family 17
NET: Registered protocol family 15
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
Power Management for TI OMAP3.
VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 1
omapfb: using mode 4.3inch_LCD
Console: switching to colour frame buffer device 60×34
clock: clksel_round_rate_div: dpll4_m4_ck target_rate 28800000
clock: new_div = 15, new_rate = 28800000
tvp514x 2-005d: Write: retry … 0
tvp514x 2-005d: Write: retry … 1
tvp514x 2-005d: Write: retry … 2
tvp514x 2-005d: Write: retry … 3
tvp514x 2-005d: Write: retry … 4
tvp514x 2-005d: Write: retry … 5
tvp514x 2-005d: Write: retry … 0
tvp514x 2-005d: Write: retry … 1
tvp514x 2-005d: Write: retry … 2
tvp514x 2-005d: Write: retry … 3
tvp514x 2-005d: Write: retry … 4
tvp514x 2-005d: Write: retry … 5
tvp514x 2-005d: chip id mismatch msb:0x87 lsb:0x87
tvp514x 2-005d: Unable to detect decoder
tvp514x 2-005d: Write: retry … 0
tvp514x 2-005d: Write: retry … 1
tvp514x 2-005d: Write: retry … 2
tvp514x 2-005d: Write: retry … 3
tvp514x 2-005d: Write: retry … 4
tvp514x 2-005d: Write: retry … 5
tvp514x 2-005d: Write: retry … 0
tvp514x 2-005d: Write: retry … 1
tvp514x 2-005d: Write: retry … 2
tvp514x 2-005d: Write: retry … 3
tvp514x 2-005d: Write: retry … 4
tvp514x 2-005d: Write: retry … 5
tvp514x 2-005d: chip id mismatch msb:0x87 lsb:0x87
tvp514x 2-005d: Unable to detect decoder
tvp514x 2-005d: Write: retry … 0
tvp514x 2-005d: Write: retry … 1
tvp514x 2-005d: Write: retry … 2
tvp514x 2-005d: Write: retry … 3
tvp514x 2-005d: Write: retry … 4
tvp514x 2-005d: Write: retry … 5
tvp514x 2-005d: Write: retry … 0
tvp514x 2-005d: Write: retry … 1
tvp514x 2-005d: Write: retry … 2
tvp514x 2-005d: Write: retry … 3
tvp514x 2-005d: Write: retry … 4
tvp514x 2-005d: Write: retry … 5
tvp514x 2-005d: chip id mismatch msb:0x87 lsb:0x87
tvp514x 2-005d: Unable to detect decoder
tvp514x 2-005d: Write: retry … 0
tvp514x 2-005d: Write: retry … 1
tvp514x 2-005d: Write: retry … 2
tvp514x 2-005d: Write: retry … 3
tvp514x 2-005d: Write: retry … 4
tvp514x 2-005d: Write: retry … 5
tvp514x 2-005d: Write: retry … 0
tvp514x 2-005d: Write: retry … 1
tvp514x 2-005d: Write: retry … 2
tvp514x 2-005d: Write: retry … 3
tvp514x 2-005d: Write: retry … 4
tvp514x 2-005d: Write: retry … 5
tvp514x 2-005d: chip id mismatch msb:0x87 lsb:0x87
tvp514x 2-005d: Unable to detect decoder
Display already enabled
Display already enabled
Buffer Size = 3686400
omap_vout: registered and initialized                   video device 0 [v4l2]
Buffer Size = 3686400
omap_vout: registered and initialized                   video device 1 [v4l2]
display->updated
twl4030_rtc twl4030_rtc: setting system clock to 2000-01-01 00:00:01 UTC (946684
801)
UBIFS: recovery needed
UBIFS: recovery completed
UBIFS: mounted UBI device 0, volume 0, name “rootfs”
UBIFS: file system size:   103348224 bytes (100926 KiB, 98 MiB, 801 LEBs)
UBIFS: journal size:       9033728 bytes (8822 KiB, 8 MiB, 71 LEBs)
UBIFS: media format:       4 (latest is 4)
UBIFS: default compressor: LZO
UBIFS: reserved for root:  0 bytes (0 KiB)
VFS: Mounted root (ubifs filesystem).
Freeing init memory: 156K
INIT: version 2.86 booting
eth0: link down
Starting udevuncorrectable error : <3>end_request: I/O error, dev mtdblock0, sec
tor 0
Buffer I/O error on device mtdblock0, logical block 0
uncorrectable error : <3>end_request: I/O error, dev mtdblock0, sector 8
Buffer I/O error on device mtdblock0, logical block 1
uncorrectable error : <3>uncorrectable error : <3>end_request: I/O error, dev mt
dblock0, sector 16
Buffer I/O error on device mtdblock0, logical block 2
uncorrectable error : <3>end_request: I/O error, dev mtdblock0, sector 0
Buffer I/O error on device mtdblock0, logical block 0
eth0: link up, 100Mbps, full-duplex, lpa 0xFFFF
tar: removing leading ‘/’ from member names

Remounting root file system…
root: mount: mounting rootfs on / failed: No such file or directory
mknod: /dev/initctl: File exists
Setting up IP spoofing protection: rp_filter.
Configuring network interfaces… udhcpc (v1.11.3) started
Sending discover…
Sending select for 192.168.0.103…
Lease of 192.168.0.103 obtained, lease time 604800
adding dns 202.112.176.2
done.
/sbin/ldconfig: /lib/libts-0.0.so.0 is not a symbolic link

Tue Jan 27 09:49:00 UTC 2009
INIT: Entering runlevel: 5
Starting syslogd/klogd: done

.——-.
|       |                  .-.
|   |   |—–.—–.—–.| |   .—-..—–.—–.
|       |     | __  |  —‘| ‘–.|  .-‘|     |     |
|   |   |  |  |     |—  ||  –‘|  |  |  ‘  | | | |
‘—‘—‘–‘–‘–.  |—–”—-”–‘  ‘—–‘-‘-‘-‘
                -‘  |
                ‘—‘

The Angstrom Distribution DevKit8000 ttyS2

Angstrom 2008.1-test-20090127 DevKit8000 ttyS2

DevKit8000 login: root
root@DevKit8000:~#
root@DevKit8000:~#
root@DevKit8000:~#
root@DevKit8000:~# shutdown now

Broadcast message from root (ttyS2) (Tue Jan 27 11:36:31 2009):

The system is going down to maintenance mode NOW!
INIT: Switching to runlevel: 1
INIT: Sending processes the TERM signal
INIT: Stopping syslogd/klogd: stopped syslogd (pid 1376)
stopped klogd (pid 1378)
done
Deconfiguring network interfaces… done.
INIT: no more processes left in this runlevel

对配置有些疑问,需要核实…

最后决定购买DevKit8000及全部配件

最后决定购买DevKit8000评估套件完全配置,1680RMB,它具有强大的图形加速功能,如果能把OpenCV移植上去,那就太完美了!

http://www.broadon.cn/item.htm?id=4064505743

升级版套件:256MB SDRAM + 256MB NAND FLASH

– 基于OMAP3530处理器,板载256MByte DDR SDRAM及256MByte NAND Flash
– 支持DVI-D/S-Video/TFT-LCD三种显示输出,可输出高清信号
– 外扩USB OTG,串口,网口,摄像头,音频,SD/MMC,键盘等接口
– 支持WinCE 6.0及Linux2.6.28系统,完全兼容beagleboard

硬件特性

CPU单元:

OMAP3530应用处理器(Pin to Pin兼容OMAP3503,OMAP3515,OMAP3525处理器)
600-MHz ARM Cortex-A8 Core
430MHz TMS320C64x+ DSP Core
256MByte DDR SDRAM,32bit
256MByte NAND Flash
6层板设计
通讯接口:

1个S-VIDEO接口
1个音频输入接口
1个双声道音频输出接口
1个10/100M以太网(芯片:DM9000,RJ45接口)
1个高速USB2.0 OTG接口(芯片:TPS65930),速度达480Mbps
2个串口(1个3线RS232电平串口,1个5线TTL电平串口)
1个SD/MMC接口
1个6*6键盘接口
1个14针标准JTAG接口
1个CAMERA接口(可外接CCD和CMOS的摄像头)
4个按键(1个启动引导按键,1个复位按键及2个用户按键)
扩展接口(包含McSPI,McBSP,I2C,HDQ及SD/MMC接口)
显示单元:

1个HDMI接口(芯片:TFP410),可输出分辨率1280×720,码率30fps的DVI-D高清信号
24bit真彩色LCD接口(含4线触摸屏接口,分辨率可支持2048*2048)
电气参数:

工作温度:-40 ~ 85℃(芯片支持)
环境湿度:20% ~ 90% ,非冷凝
机械尺寸:110 mm * 95 mm
电气指标:+5V电源供电,电流150mA

订购信息

DevKit8000评估套件完全配置装箱清单:
一个DevKit8000单板  
一个4.3寸触摸屏
一个512MB SD卡
一条交叉网线
一条Mini USB A线转USB A型母头
一条Mini USB B线转USB A型公头
一个USB HUB(带电源)
一个HMDI转DVI-D转接线
一条S-Video线
一个5V 2A电源
一支触摸笔
一张光盘(使用文档、原理图、源代码及工具)

产品自需方购买日起质保半年,核心元器件除外,液晶屏不参与质保。长期提供免费的电话和Email技术支持。

DevKit8000开发板全部配件(12件)

苹果i系列产品的操作系统:iOS

iOS是由蘋果公司為 iPhone 開發的操作系統。它主要是給 iPhone、iPod touch、iPad 以及 Apple TV 使用。就像其基於的 Mac OS X 操作系統一樣,它也是以 Darwin 為基礎的。原本這個系統名為 iPhone OS,直到 2010 年 6 月 7 日 WWDC 大會上宣布改名為 iOS。 iOS的系統架構分為四個層次:核心操作系統層(the Core OS layer),核心服務層(the Core Services layer),媒體層(the Media layer),可輕觸層(the Cocoa Touch layer)。系統操作佔用大概240MB的記憶體空間。

2011年2月2日,苹果已经发布了其 iOS4.3 beta3 预览版。

更详细的信息,请到Wiki上浏览:http://zh.wikipedia.org/zh/IOS

OMAP3530 DSP Howto ( Really works by DSPLINK)

————–我转载它,主要是为了自己学习

2009/11/03 17:33

搞了一段很長的時間終於把DSP功能弄起來了,該是回頭紀錄一下”眉角”了.

1.Before touch anything

目前有兩種方式可以控制DSP,一個是

TI DVSDK

提供的DSPLINK,另一個則是DSPBRIDGE.

以我從google搜尋之後的了解DSPBRIDGE目前是沒有繼續maintain.

DSPLINK是

TI

比較建議的方式.

所搭配的media library為

DSPLINK + gstreamer

DSPBRIDGE + openmax + gstreamer
http://felipec.wordpress.com/2009/10/13/new-project-gst-dsp-with-beagleboard-demo-image/
http://felipec.wordpress.com/2008/12/12/gst-openmax-demo-on-the-beagleboard/

這邊我選擇DSPLINK控制DSP

2.Software

dvsdk_3_00_02_44

gst-

ti

-plugin-full-1.00.02

gst-omapfb

Build and install to target root file system (過程就省略了)

可參考以下作法
http://ossie.wireless.vt.edu/trac/wiki/BeagleBoard_CodecEngine

安裝目錄
DVSDK

: /opt/

dvsdk

gstreamer : /opt

3.Setup

DSPLINK 透過share memory的方式跟DSP交換資料所以有另一個driver叫cmemk.ko負責建立memory pool. 但這塊memory必須脫離kernel的掌控因此必須要空出一塊memory讓cmemk.ko使用.至於大小要看實際memory size跟DSP所需要的size來決定.

http://pixhawk.ethz.ch/wiki/tutorials/omap/dsplink/memorymap

依照以上說明修改以下檔案

dsplink_1_61_03/packages/dsplink/config/all/CFG_OMAP3530_SHMEM.c

dsplink_1_61_03/packages/dsplink/dsp/inc/DspBios/5.XX/

OMAP3530

/dsplink-

omap3530

-base.tci

dsplink_1_61_03/packages/dsplink/config/all/CFG_OMAP3530_SHMEM.c

我的target board有256MB DDR,因此記憶體配置如下

# 0x40200000    60 KB   CMEM (internal memory, see comment below)

# 0x80000000    200 MB   Linux

# 0x8C900000    16 MB   CMEM (external memory)

# 0x8D900000     2 MB   DSPLINK (MEM)

# 0x8DB00000     unused

kernel boot command 加上 mem=200M

For kernel 2.6.27

optargs=init=/init omapfb.video_mode=1280x1024MR-16@60 vram=12M omapfb.vram=4M,4M,4M omapfb.debug=1 omap-dss.def_disp=lcd omap-dss.debug=1 mem=200M

For kernel 2.6.29

setenv optargs ‘init=/init omapdss.def_disp=dvi omapfb.mode=dvi:1280x1024MR-16@60 vram=12M omapfb.vram=0:4M,1:4M,2:4M mem=200M’

memory pool配置如下

insmod cmemk.ko phys_start=0x8C900000 phys_end=0x8D900000 pools=20×4096,10×131072,2×1048576,1×5250000,4×829440,2×691200

gstreamer需要設定target上的環境變數好讓系統找的到執行檔及plug-in

export PATH=$PATH:/opt/gstreamer/bin

export GST_PLUGIN_PATH=/opt/gstreamer/lib/gstreamer-0.10

export LD_LIBRARY_PATH=/opt/gstreamer/lib

3.Get DSP work

載入drivers

#cd /opt/

dvsdk

#./loadmodules.sh

CMEMK module: built on Oct 30 2009 at 20:23:52

  Reference Linux version 2.6.28

  File /home/gigijoe/

OMAP3530

/dvsdk_3_00_02_44/linuxutils_2_24_02/packages/

ti

/sdo/linuxutils/cmem/src/module/cmemk.c

ioremap_nocache(0x8c900000, 16777216)=0xcf000000

allocated heap buffer 0xcf000000 of size 0x32c000

cmem initialized 6 pools between 0x8c900000 and 0x8d900000

DSPLINK Module (1.61.03) created on Date: Oct 30 2009 Time: 20:20:31

# lsmod

lpm_omap3530 8276 0 – Live 0xbf02c000

dsplinkk 114052 1 lpm_omap3530, Live 0xbf00b000

cmemk 24428 0 – Live 0xbf000000

測試omapfb, 應該會在畫面上看到彩色條紋.

gst-launch videotestsrc num-buffers=1000 ! omapfbsink

播放

TI

h.264 raw data sample

gst-launch –gst-debug-level=1 filesrc location=”/media/dcim/100andro/ntsc.264″ ! typefind ! TIViddec2 ! omapfbsink

Play avi file

gst-launch –gst-debug-no-color –gst-debug=

TI

*:2 filesrc location=/media/dcim/100andro/aris.mpeg ! typefind ! qtdemux name=demux demux.audio_00 ! queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! typefind ! TIAuddec1 ! audioconvert ! osssink demux.video_00 ! typefind ! TIViddec2 ! omapfbsink

Play mpeg4 file

gst-launch –gst-debug-no-color –gst-debug=

TI

*:2 filesrc location=/media/dcim/100andro/KenBlock-TopGear.mp4 ! typefind ! qtdemux name=demux demux.audio_00 ! queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! typefind ! TIAuddec1 ! audioconvert ! osssink demux.video_00 ! typefind ! TIViddec2 ! omapfbsink

Play H.264 mpeg4 file without mp3 audio

gst-launch filesrc location=/media/dcim/100andro/sany0014.mp4  ! typefind ! qtdemux name=demux  demux.video_00 ! typefind ! TIViddec2 ! omapfbsink

4.Debug

http://tiexpressdsp.com/wiki/index.php?title=Debugging_DSPLink_using_SET_FAILURE_REASON_prints

http://tiexpressdsp.com/index.php/Enabling_trace_in_DSPLink

一開始有一段時間kernel-2.6.29 DSP_init總是失敗

# ./messagegpp ./message.out 1000

========== Sample Application : Failure [0x8000800b] in [0x401] at line 522

MESSAGE ==========

Entered MESSFailure [0x8000802d] in [0x401] at line 544

AGE_Create ()

Failure [0x8000802d] in [0x401] at line 544

Failure [0x8000802d] in [0x401] at line 544

ISR_Install:445

request_irq 28

request_irq failed with error: -16

Failure [0x80008008] in [0x502] at line 459

Failure [0x80008008] in [0x80a] at line 824

Failure [0x80008008] in [0x80a] at line 1061

Failure [0x80008008] in [0x801] at line 597

Failure [0x80008008] in [0x701] at line 370

 DSP_init status [0x80008008]

Assertion failed ((isrObj!= NULL) && (ISR_InstalledIsrs [isrObj->dspId][isrObj->irq] == isrObj)). File : /home/gigijoe/

OMAP3530

/dvsdk_3_00_02_44/dsplink_1_61_03/packages/dsplink/gp

p/src/../../gpp/src/osal/Linux/2.6.18/isr.c Line : 507

Failure [0x80008000] in [0x502] at line 515

Failure [0x80008008] in [0x300] at line 476

Failure [0x80008008] in [0x300] at line 563

PROC_attach () failed. Status = [0x80008008]

PROC_setup () failed. Status = [0x80008008]

Leaving MESSAGE_Create ()

Entered MESSAGE_Delete ()

Assertion failed (IS_VALID_MSGQ (msgqQueue)). File : msgq.c Line : 484

MSGQ_release () failed. Status = [0x8000800b]

Assertion failed (IS_VALID_MSGQ (msgqQueue)). File : msgq.c Line : 335

Leaving MESSAGE_Delete ()

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

Trace DSPLINK driver發現request_irq 28 居然失敗了.很明顯IRQ被佔據了.

看看到底是誰

cat /proc/interrupts

           CPU0

 11:          0        INTC  prcm

 12:          1        INTC  DMA

 18:          0        INTC  sr1

 19:          0        INTC  sr2

 24:          0        INTC  omap-iommu.1, Omap 3 Camera ISP

 25:          1        INTC  OMAP DSS

28:          0        INTC  omap-iommu.2

 56:        347        INTC  i2c_omap

 61:          0        INTC  i2c_omap

 72:          1        INTC  serial idle

 73:          1        INTC  serial idle

 74:         94        INTC  serial idle, serial

 77:          0        INTC  ehci_hcd:usb2

 83:          0        INTC  mmc0

 86:         14        INTC  mmc1

 92:          0        INTC  musb_hdrc

 93:          0        INTC  musb_hdrc

 95:        641        INTC  gp timer

160:          0        GPIO  mmc1

167:          0        GPIO  user

181:          8        GPIO  eth0

378:          0     twl4030  twl4030_usb

379:          0     twl4030  rtc0

384:          0     twl4030  mmc0

原來是iommu啊,OK,調整一下kernel config

Disable

Device Drivers->Multimedia Devices->Video Capture Adapters->OMAP 3 Camera Support

System Type->

TI

OMAP Implemenation->IOMMU Support

這樣就OK囉

其實還有一些疑慮沒有解決.

IOMMU 以 Shared IRQ 方式 request_irq而DSPLINK Driver request_irq 並不是.

因此造成問題,DSPLINK Driver是否應該以Shared IRQ方式request_irq呢?

用下载电缆实现AT89S5X的ISP编程

本文转载自:http://www.infomcu.com/Program/20071007/455_2.html

 

摘要:下载电缆被广泛应用于电子系统设计与调试过程中。本文介绍它的基本原理和编程控制方法;针对目前单片机的 ISP串行编程模式列举实例,简要介绍AT89S5X的串行编程的方法和部分协议,使用VC编程,应用下载电缆实现对AT89S5X系列单片机的ISP编程;文末提出统一下载电缆硬件或软件的设想,并提供可以下载支持多种单片机ISP编程软件的网址。

关键词:下载电缆 串行编程 AT89S5X ISP

引言

  随着电子技术的日益发展,芯片的规模越来越大,封装日趋小型化,相应的对系统板级调试困难也在加大。IEEE制定了标准测试端口与边界扫描的标准IEEE std 1149.1,这就是JTAG接口协议。JTAG接口通过TCK、TDI、TDO、TMS四根信号线,以串行模式为系统提供了对复杂芯片的各引脚连通性测试,进步还能实现对可编程芯片的配置与处理器芯片的调试等等。下载电缆就是一种使用计算机的并行端口通过软件的仿零点实现JTAG接口协议,访问可编程芯片的廉价工具。本文使用的下载电缆是Altera公司为其可编程逻辑器件开发的ByteBlasterMV电缆。ISP(在系统可编程的简称)是最先由 Lattice公司提出的一种技术,是通过同步串行方式实现对其可编程逻辑器件的重配置。ISP与JTAG的接口协议很相像,只是后者形成了标准。ISP现在已经成为一种概念,它的提出改变了传统硬件系统开发的流程,大大方便了开发者,加快了开发速度。现在大多数的可编程器件(FPGA、CPLD、DSP、MCU……)都支持ISP特性。单片机也不例外,Atmel公司推出的AT89S系列51单片机也符合ISP特性。
 
1 下载电缆的硬件

  要实现JTAG接口协议可以使用专用的IC,如74LVT8980、74LVT8990,它与MCU配合可以提供高速的JTAG串行访问,成本较高。下载电缆则是实现JTAG接口协议的廉价方案。它仅命名用74HC244做线路驱动,由计算机的并行端口引出I/O作为TCK、TDI、TDO、TMS等信号线。由于并口在SPP模式下共有3个端口——数据输出端口、控制输出端口、状态输入端口,各种下载电缆究竟从那个端口引出JTAG信号线几乎都不相同,图1、图2是两种下载电缆的原理图。

并口简介:

  计算机的并行端口工作在SPP模式下,对它的控制是通过数据输出端口、控制输出端口、状态输入端口来实现的。

  并行口有25个引脚,其中包括8位数据线、5位状态线、4位控制线。

  数据端口(378H):D0~D7用于数据输出。

  状态端口(379H):*S7(Busy)、S6(nAck)、S5(PE)、S4(Select)、S3(nError)。

  控制端口(37AH):*C3(nSelin)、S2(nInit)、*C(AnutoFeed)、*C0(nStrobe)。

  ()(端口地址是缺省的LPT1设置;*表示此引脚有反向器)

  表1为并行端口定义。对应原理图有:

  Altera的下载电缆

  TCK、TDI、TMS、TDO分别对应D0、D6、D1、*S7;

  Atmel的电缆

  TCK、TDI、TMS、TDO分别对应*C0、D0、*C3、S6。

  表1 并行端口定义表

引脚号 名   称 数据位
1 nStrobe *C0
2 D0 D0
3 D1 D1
4 D2 D2
5 D3 D3
6 D4 D4
7 D5 D5
8 D6 D6
9 D7 D7
10 nAck S6
11 Busy *S7
12 PE S5
13 Select S4
14 Auto Feed *C1
15 nError S3
16 nInit C2
17 nSelin *C3
18~25 GND GND

2 下载电缆的编程方法

  用计算机控制下载电缆实现JTAG协议,就是对并口3个I/O端口的读写操作,用0-1的变化来模拟JTAG时序。在Win98和Win2000环境下读写I/O,需要驱动程序。本文使用DriverLINX Port I/O Driver(可以从WWW.sstnet.com下载)来实现I/O端口访问。安装DLPORTIO以后,通过调用DLPORTIO.DLL动态连接库中的

  UCHAR DLPORT_API D1PortRead PortUchar(IN ULONG Port);

    VOID DLPORT_API D1PortWrite PortUchar(IN ULONG Port,IN UCHAR Value);两个函数就可以访问位于378H、379H、37AH(这是缺省的LPT1设置)的3个并口I/O端口。程序段1实现了对Altera下载电缆的一次电平赋值:

  程序段1

  Altera下载电缆电平赋值函数

  Void CAvrISPDlg::Setbit(){

  Unsigned char value=0;

  If(!m_tck)value|=0x01;

  If(!m_tms)value|=0x02;

  If(!m_tdi)value|=0x40;

  DlPortWritePortUchar(0x378,value);

  Value=DlPortReadPortUchar(0x379);

  If(value & 0x80)m_tdo=0;

  Else m_tdo=0;

  }

  通过以上程序依次改变JTAG各接口I/O的电平状态,模拟JTAG协议的时序,就可以访问支持JTAG标准的各种芯片。

3 ISP协议的解析与实现

  对AT89S5X系列单片机ISP编程不使用JTAG协议,而使用SPI同步串行接口协议,如图3所示。

  针针这种8位SPI接口协议,我们使用数组来模拟时序:

  时钟信号固定为unsigned char sck[19]={0,0,1,0,1,0,1,0,1,0,10,1,0,1,0,1,0,1,0,0};

  输出的数据信号由程序实现情况自动生成数组unsigned char mosi[19];

  输入的数据根据读入的信号生成数组unsigned char miso[19];

  再调用上文的Setbit()函数,依次发送19位的JTAG接口I/O状态,同时读入返回信号,即完成一次对AT89S5X芯片的SPI单字节访问。

  在单字节访问基础上,参考Atmel公司的AT89S5X数据手册的串行编程指令表中的指令格式,就可以实现ISP了。

  表2为AT89S51串行编程指令表。

  表2 AT89S51串行编程指令集

指  令 指  令  模  式 说  明
第1字节 第2字节 第3字节 第4字节
编程使能 10101100 01010011 XXXXXXXX XXXXXXXX 使能串行编程
芯片擦除 10101100 100XXXXX XXXXXXXX XXXXXXXX 擦除程序存储顺
读程序字节 00100000 XXXXA11~A8 A7~A0 D7~D0 字节模式读程序
写程序字节 01000000 XXXXA11~A8 A7~A0 D7~D0 字节模式写程序
写保护位 10101100 111000B1B2 XXXXXXXX XXXXXXXX 写保护位
读保护位 00100100 XXXXXXXX XXXXXXXX XXLB3~LB1XX 读当前保护位
读标志字节 00101000 XXXA5~A1 A0XXXXXX 标志数据 读取标志数据
读程序页 00110000 XXXXA11~A8 数据0 数据1…255 页模式读程序
写程序写 01010000 XXXXA11~A8 数据0 数据1…255 页模式写程序

 注:①串行编程要在RST端接高电平情况下实现;②X表示此位关心;③A11~A0是要访问字节地址;④D7~D0是读写的数据;⑤B1、B2是保护位;⑥LB3~LB1表示3种状态。

  针对AT89S51单片机,其标志字节为:(00H)1EH、(02H)51H、(04)06H.

  程序段2将得到AT89S51单片机的标志字节。(其中SPIcomm()为SPI单字节访问函数)。

  程序段2

  获得AT89S51单片机标志字节的程序段

  CString str;

  for(addr=1;addr<3;addr++){

  m_comm=0x28;

  SPIcomm();

  m_comm=addr;

  SPIcomm();

  m_comm=0;

  SPIcomm();

  m_comm=0;

  SPIcomm();

  Str.Format(“0x%02X”,m_dat);

  m_out+=str;

  }

  图4是AT89S51进行串行编程时的硬件原理图。

4 小结

  下载电缆为我们提供了深入芯片内部的触手。通过JTAG标准协议,我们可以用下载电缆检查芯片焊接连通性、重新配置可编程器件、下载程序固件以及调试处理器的运行。

  小到8位单片机AT89S5X、AVR的串行编程,可编程器件MAX7000的配置;大到32位嵌入式处理器的调试,上万门FPGA芯片的配置都可以见到下载电缆的身影。例如,ARM使用下载电缆的JTAG仿真可以通过EmbeddedICE接口实现对ARM的开发调试,或者使用ARM的边界扫描特性为嵌入式系统板下载启动程序等等。

  目前下载电缆的使用越来越多,各个厂商分别推出了自已的符合JTAG标准的芯片或者是使用ISP技术的新产品。与此同时,下载电缆的种类也非常多,大多数的区别仅在于并口信号与JTAG信号的对应关系不同。往往有时候开发一个产品,要用到很多种不同的电缆。我们希望可以使用一种标准的下载电缆来实现所有JTAG应用;或者是通过一个计算机程序可以通过配置文件来使用各种下载电缆。在我们的BLMVISP软件中,就支持了现有的两种电缆。

  使用ISP技术可以大大加快硬件开发速度。下载电缆与计算机软件的配合使用也可以降低开发成本,非常适合个人爱好者与初学者使用。

  有兴趣的读者可以下载BLMVISP演示版的VC源程序压缩包(demo_blmvisp.zip),以便参考;也可以访问:http://51kaifa.nease.net或者email:blmv@eyou.com。