【分享】K60(Cortex-M4)开源开发探索——转载

2020-02-21 21:13发布

本帖最后由 cn_x 于 2014-8-28 23:07 编辑

一、Cortex-M4内核
简介
                        ARM Cortex-M4 处理器是由 ARM 专门开发的最新嵌入式处理器,用以满足需要有效且易于使用的控制和信号处理功能混合的数字信号控制市场。
         高效的信号处理功能与 Cortex-M 处理器系列的低功耗、低成本和易于使用的优点的组合,旨在满足专门面向电动机控制、汽车、电源管理、嵌入式音频和工业自动化市场的新兴类别的灵活解决方案。               Cortex‐M4是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CM4 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性, CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。换句话说,不是因为有两条总线,可寻址空间就变成8GB 了。
        比较复杂的应用可能需要更多的存储系统功能,为此CM4提供一个可选的MPU,而且在需要的情况下也可以使用外部的cache 。另外在CM4中,Both小端模式和大端模式都是支持的。
        CM4内部还附赠了好多调试组件,用于在硬件水平上支持调试操作,如指令断点,数据观察点等。另外,为支持更高级的调试,还有其它可选组件,包括指令跟踪和多种类型的调试接口。
        复位状态后,CM4的第一件事就是读取下列两个 32位整数的值:
       (1)从地址0x0000,0000处取出 MSP 的初始值。
       (2)从地址0x0000,0004处取出 PC的初始值——这个值是复位向量,LSB 必须是1 。
        然后从这个值所对应的地址处取指。
                 注意,这与传统的ARM 架构不同——其实也和绝大多数的其它单片机不同。传统的RM 架构总是从 0 地址开始执行第一条指令。它们的 0 地址处总是一条跳转指令。在 CM3中,0 地址处提供 MSP 的初始值,然后就是向量表(向量表在以后还可以被移至其它位置)。
        向量表中的数值是32位的地址,而不是跳转指令。向量表的第一个条目指向复位后应执行的第一条指令。
        参考文献:《Cortex-M3权威指南》
二、K60简介   
        Kinetis是基于ARM Cortex-M4具有超强可扩展性的低功耗、混合信号微控制器。第一阶段产品由五个微控制器系列组成,包含超过两百种器件,在引脚、外设和软件上可兼容。每个系列提供了不同的性能,存储器和外设特性。通过通用外设、存储器映射和封装的一致性来实现系列内和各系列间的便捷移植。
       Kinetis 微控制器基于飞思卡尔创新的90纳米薄膜存储器(TFS)闪存技术,具有独特的Flex存储器(可配置的内嵌EEPROM)。Kinetis微控制器系列融合了最新的低功耗革新技术,具有高性能、高精度的混合信号能力,宽广的互连性,人机接口和安全外设。飞思卡尔公司以及其他大量的ARM第三方应用商提供对Kinetis 微控制器的应用支持。

        
转自古-月http://blog.csdn.net/hcx25909






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
21条回答
cn_x
2020-02-22 15:04
本帖最后由 cn_x 于 2014-8-28 23:12 编辑

K60(Cortex-M4)开源开发探索(六)—— OpenOCD的配置

      OpenOCD需要针对不同的JTAG工具和不同的目标芯片,配置一个配置文档。一般而言,配置文档分为4个部分。
        1、Daemon         
        主要是配置openocd对外的通讯所使用的本地TCP/IP端口,如gdb、telnet所使用的端口。 接口Port的定义一般如下(非特殊情况,无需修改,定义了一些端口号)
[plain] view plaincopy


  • telnet_port 4444  
  • tcl_port 6666  


         在用telnet或gdb进行调试时,将会根据定义的端口号连接到服务程序openocd上。     
         2、Interface          

        就是openocd所操作的连接开发板的调试器。
[plain] view plaincopy


  • # type of debug adapter  
  • interface ft2232   
  • # Provides the USB device description (the iProduct string) of the FTDI FT2232 device. If not specified, the FTDI default value is used.  
  • ft2232_device_desc "USB<=>JTAG&RS232"   
  • # Each vendor’s FT2232 device can use different GPIO signals to control output-enables, reset signals, and LEDs  
  • ft2232_layout jtagkey   
  • # The vendor ID and product ID of the FTDI FT2232 device  
  • ft2232_vid_pid 0x1457 0x5118   


         注: 查看ID的方法:
           lsusb //查看设备的相关简要信息

           获取如下:
[plain] view plaincopy


  • Bus 006 Device 030: ID 1457:5118 First International Computer, Inc. OpenMoko Neo1973 Debug board (V2+)  


           获取更详细的信息:
[plain] view plaincopy


  • sudo lsusb -v -D /dev/bus/usb/006/030  

           详细信息如下:
[plain] view plaincopy


  •    Device: ID 1457:5118 First International Computer, Inc. OpenMoko Neo1973 Debug board (V2+)  
  •    Device Descriptor:  
  •    bLength                18  
  •    bDescriptorType         1  
  •    bcdUSB               2.00  
  •    bDeviceClass            0 (Defined at Interface level)  
  •    bDeviceSubClass         0   
  •    bDeviceProtocol         0   
  •    bMaxPacketSize0         8  
  •    idVendor           0x1457 First International Computer, Inc.  
  •    idProduct          0x5118 OpenMoko Neo1973 Debug board (V2+)  
  •    bcdDevice            5.00  
  •    iManufacturer           1 www.100ask.net  
  •    iProduct                2 USB<=>JTAG&RS232  
  •    iSerial                 0   
  •    bNumConfigurations      1  
  •    Configuration Descriptor:  
  •    bLength                 9  
  •    bDescriptorType         2  
  •    wTotalLength           55  
  •    bNumInterfaces          2  
  •    bConfigurationValue     1  
  •    iConfiguration          0   
  •    bmAttributes         0x80  
  •    (Bus Powered)  
  •    MaxPower              100mA  
  •    Interface Descriptor:  
  •    bLength                 9  
  •    bDescriptorType         4  
  • bInterfaceNumber        0  
  •    bAlternateSetting       0  
  •    bNumEndpoints           2  
  •    bInterfaceClass       255 Vendor Specific Class  
  •    bInterfaceSubClass    255 Vendor Specific Subclass  
  •    bInterfaceProtocol    255 Vendor Specific Protocol  
  •    iInterface              2 USB<=>JTAG&RS232  
  •    Endpoint Descriptor:  
  •    bLength                 7  
  • bDescriptorType         5  
  • bEndpointAddress     0x81  EP 1 IN  
  •    bmAttributes            2  
  •    Transfer Type            Bulk  
  •    Synch Type               None  
  •    Usage Type               Data  
  • wMaxPacketSize     0x0040  1x 64 bytes  
  • bInterval               0  
  •    Endpoint Descriptor:  
  •    bLength                 7  
  • bDescriptorType         5  
  • bEndpointAddress     0x02  EP 2 OUT  
  • bmAttributes            2  
  • Transfer Type            Bulk  
  • Synch Type               None  
  • Usage Type               Data  
  • wMaxPacketSize     0x0040  1x 64 bytes  
  • bInterval               0  
  •    Interface Descriptor:  
  • bLength                 9  
  •    bDescriptorType         4  
  •    bInterfaceNumber        1  
  •    bAlternateSetting       0  
  •    bNumEndpoints           2  
  •    bInterfaceClass       255 Vendor Specific Class  
  •    bInterfaceSubClass    255 Vendor Specific Subclass  
  •    bInterfaceProtocol    255 Vendor Specific Protocol  
  •    iInterface              2 USB<=>JTAG&RS232  
  •    Endpoint Descriptor:  
  •    bLength                 7  
  •    bDescriptorType         5  
  •    bEndpointAddress     0x83  EP 3 IN  
  •    bmAttributes            2  
  •    Transfer Type            Bulk  
  •    Synch Type               None  
  •    Usage Type               Data  
  •    wMaxPacketSize     0x0040  1x 64 bytes  
  •    bInterval               0  
  •    Endpoint Descriptor:  
  •    bLength                 7  
  •    bDescriptorType         5  
  •    bEndpointAddress     0x04  EP 4 OUT  
  •    bmAttributes            2  
  •    Transfer Type            Bulk  
  •    Synch Type               None  
  •    Usage Type               Data  
  •    wMaxPacketSize     0x0040  1x 64 bytes  
  •    bInterval               0  
  •    Device Status:     0x0000  
  • Bus Powered)  

        3、board       (1)jtag速率
        对于常见的arm、arm9,jtag配置的最大速率不能高于于cpu时钟的六分之一。如果所用的cpu时钟为60Mhz,因此jtag最大速率可设置为:
[plain] view plaincopy


  • jtag_khz 10000  

         如果使用
[plain] view plaincopy


  • jtag_rclk 3000  

        即使用自适应时钟,它将会用rclk自己搜索jtag工作频率,速度会很慢。
        (2)芯片复位

        这里配置的为jtag和target cpu可用的复位信号。其中复位jtag中的tap控制器的为trst信号,srst信号用于target cpu复位,它是都是可选的。最好的情况是这两个信号都有,这样openocd就可分别控制tap控制器和cpu的复位。
[plain] view plaincopy


  • reset_config trst_and_srst  

        4、Target        在/usr/local/share/openocd/scripts/target目录下可以找到很多芯片的配置例程,因此参照样本添加配置。
        配置TAP是一个通用的端口,通过TAP可以访问芯片提供的所有数据寄存器(DR)和指令寄存器(IR),配置语法为:

[plain] view plaincopy


  • jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0×1 -irmask 0xf -expected-id $_CPUTAPID  


       配置cpu 此处设置cpu名称以及大小端排列顺序即可。配置如下:
[plain] view plaincopy


  • target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME  

       在使用openocd下载映像到ram时,为了提高速度,在ram中设置一块工作区域,配置如下:
[plain] view plaincopy


  • $_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0  


       由于K60是Cortex-M4的内核,相比之前的arm系列有很大的不同,openocd针对cortex系列也有很多的特殊配置,所以上面的配置还只是初级的配置文档,更加详细的配置还要待今后对这一内核进入深入研究之后再添加了。
       参考链接:http://a.chinaunix.com/space.php?uid=23947686&do=blog&id=172600



转自古-月
http://blog.csdn.net/hcx25909



一周热门 更多>