Sitara AM335x系列资源小合集[2017/02/08更新中……]

随着客户群不断地增多,发现越来越多的客户有大量的对于资源方面的咨询需求,有刚入门的,有玩了一段时间的。所以这里我开一个主帖,各个楼层独立话题,把目前一些比较分散的有用资源做个汇总,可以方便大家索引。

另外,针对于一些常见的问题,和疑难杂症之类的, 我也会更新到这个帖子中来。

大家有什么问题,或者想知道的某个话题,可以在这个帖子中给我留言,我会根据实际支持的case,找个案例分析,总结分享出来。

因为会不断更新,所以形式可能就不拘一格了,分楼层完成了后我就会更新到主贴的目录中。

PS: 如果下面的问题解析对你有用,请帮忙在主贴中对应的topic下面Vote一下。我们后续会根据这个的反馈情况,考虑增加相应的topic到我们的在线视频支持中。

畅所欲言!欢迎拍砖!

目录:

1. AM335x 软件编译指南:Linux SDK/Processor SDK -- Uboot/Kernel 编译移植入门。[poll]

2. DDR2/3的配置详解(带视频)。[poll]

3. AM335x关于使用USB启动烧录的问题--Uniflash。 [poll]

4. AM335x的休眠唤醒调试。[poll]

5. AM335x Linux SDK 6.0 最小文件系统

6. TBD

7. TBD

8. 论坛用户总结搜集贴(包含外部资源链接)

39 个回复

  • 1. AM335x 软件编译指南:Linux SDK/Processor SDK -- Uboot/Kernel 编译移植入门。

    如果你是第一次开始玩AM335x,你会发现我们的软件资源会非常多,比如Linux,TI-RTOS,RT-Linux等。

    这里Linux使用的频率最高,问到的人也最多,所以稍微整理一下:

    首先我们的Linux发布的软件包有AMSDK和Processor SDK,按照发行的时间如下所示:(包含了下载地址)

    AM335x Linux SDK 6.0  kernel 3.2 http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/06_00_00_00/index_FDS.html
    AM335x Linux SDK 7.0  kernel 3.12 http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/07_00_00_00/index_FDS.html
    AM335x Linux SDK 8.0  v3.14.26 http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/latest/index_FDS.html
         
    Processor SDK 1.0.0.0 v3.14.26 http://software-dl.ti.com/sitara_linux/esd/processor-sdk/PROCESSOR-SDK-LINUX-AM335X/01_00_00_00/index_FDS.html
    Processor SDK 1.0.0.3 v3.14.43 http://software-dl.ti.com/sitara_linux/esd/processor-sdk/PROCESSOR-SDK-LINUX-AM335X/01_00_00_03/index_FDS.html
    Processor SDK 2.0.0 v4.1 http://software-dl.ti.com/processor-sw/esd/PROCESSOR-SDK-LINUX-AM335X/02_00_00_00/index_FDS.html
    Processor SDK 2.0.1 v4.1.13 http://software-dl.ti.com/processor-sw/esd/PROCESSOR-SDK-LINUX-AM335X/02_00_01_07/index_FDS.html
    Processor SDK 2.0.2 v4.1.18 http://software-dl.ti.com/processor-sw/esd/PROCESSOR-SDK-LINUX-AM335X/02_00_02_11/index_FDS.html
    Processor SDK 3.0.0 v4.4.12 http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/latest/index_FDS.html

    这里多说两句,我们目前经常碰到的情况,很多人用的是Linux SDK 6.0, kernel3.2的版本。其实在6.0的版本之前,还有5.4、5.5、5.6、5.7等一系列的版本,都是基于Kernel3.2的,可以说TI在这个版本上经历了很长的时间,所以目前我手头有大量客户群,都是基于这个版本的,因此关于这个版本的资料还是比较多的。但是这个版本的kernel是基于board configure file的,没有device tree。从SDK 7.0开始,到后面的PDK,都是使用了device tree,这点也是很大的不同。

    有人可能会问,为啥从Processor SDK(PDK)开始变了命名和架构?因为Processor SDK开始,TI在努力把自己的处理器产品A8/A9/A15/A15+DSP都坐在一个PDK的架构里,方便平滑的进行软件切换。这样以后如果大家有升级的需求,本来用A8的现在想用A15,就仍然可以使用对应的PDK来进行A15的编译,这样就不用花精力在搞清楚软件架构是怎样,该如何编译上面。

    那么后面版本的更迭中,在不同版本之间都有哪些差异,可以参考:http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_Release_Notes

    上述就是下载的SDK源码资源。下面关于不同版本的编译方法进行介绍:

    如果使用的是Processor SDK版本的,请参考:

    http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_Software_Developer%E2%80%99s_Guide

    如果使用的是Linux SDK 6.0版本的,请参考:

    Uboot User Guide:http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User%27s_Guide

    Kernel User Guide: http://processors.wiki.ti.com/index.php/AMSDK_Linux_User%27s_Guide

    Module User guide:http://processors.wiki.ti.com/index.php/AM335x_PSP_User%27s_Guide

    如果使用的是Linux SDK 6.0之前版本的,请参考:

    http://processors.wiki.ti.com/index.php/Sitara_Linux_Software_Developer%E2%80%99s_Guide

  • 2. DDR2/3的配置详解(带视频)

    DDR的配置讲解文档已经有很多了,版上搜一搜就可以看到很多:

    DDR3 软件 Leveling和寄存器参数配置:http://www.deyisupport.com/question_answer/f/25/t/17684.aspx

    DDR3设计与调试小结:http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/30143.aspx

    这里我总结了一个PDF,言简意赅的把这个配置的流程,以及流程中经常出现的问题都标识出来了。对于大家经常问到的,还是不知道一些具体的参数怎么配的问题,我在这个文档对应的优酷视频中有比较仔细的讲解,希望对大家有帮助。

    TI Sitara AM335x DDR3 Configuration & Software leveling

    下面就是对应的两个优酷视频,第一个是讲解配置的注意事项,第二个是用一个实例来录制配置的过程,这是一个实际的案例,正好拿过来做范例。

    TI Sitara AM335x DDR3配置讲解:
    http://v.youku.com/v_show/id_XMTY1NzE2NjY1Ng==.html

    TI Sitara AM335x DDR3配置实例讲解:
    http://v.youku.com/v_show/id_XMTY1NzE4ODUwNA==.html

    PS: AM335x Linux SDK 6.0 Download地址:

    http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/06_00_00_00/index_FDS.html

    有些朋友反馈公司不给看视频的,可以参考下面是针对这个流程中的详细解释:

    1.      EMIF的配置
    a.      TIMING1,2,3的配置
    简而言之,这一步骤是要根据当前你的板子上所使用的DDR型号,找到对应的datasheet,然后根据datasheet填入我们的AM335x DDR Calculation tool (.zip)中。
    这一步骤很简单,就是在使用的DDR的手册中搜对应的关键参数值,然后填到黄色的数字中,最终这个excel表会生成TIMIGN1,2,3这么三组参数值,最终即为我们需要用到的三个参数值。
    b.      SDRAM_CONFIG 的配置
    根据使用的DDR手册,来配置该寄存器,该寄存器的详细描述参考AM335x的TRM手册的7.3.5 EMIF4D Registers章节,偏移量为8h的即为SDRAM_CONFIG寄存器,把关键性的配置核查一下,阻抗匹配之类的,就用原来的推荐值就可以了。
    这两个步骤可以参考:http://processors.wiki.ti.com/index.php/AM335x_EMIF_Configuration_tips
    2.      PHY的配置
    这里只需要将DDR_CK和DQS的几个长度量出来,填入Ratio Seed Spreadsheet中。该Excel表会自动算出对应的参数值。特别注意:在量取长度的时候应取从管脚到管脚间的走线,不要算上了匹配电阻走线部分的长度。
    3.      DDR3 software leveling
    如果是DDR3,还需要一步是做software leveling。在上述两个步骤完成后,你得到的那些参数值,填入到最新的配置中,将步骤2得到的数值作为种子值输入到算法中,算法会自动为你计算得到一组最优解。如果你使用了UART0作为调试串口,主时钟为24MHz,可以SD卡启动的话,可以参考该方法来进行software leveling:https://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/53263.aspx

    如果没有UART0作为调试串口的话,则需要使用JTAG进行该算法,参考:
    http://processors.wiki.ti.com/index.php/AM335x_DDR_PHY_register_configuration_for_DDR3_using_Software_Leveling
    至此,如果得到了最优解,则DDR3的配置就算完成了,把上述配置的参数以及最优解设置到你的板级配置文件中即可。

  • 3. AM335x关于使用USB启动烧录的问题—Uniflash

    大家知道AM335x是可以直接使用USB启动的,一般来说可以用来做启动烧录。这种情况下,需要在PC机上,装一个软件:Uniflash,用USB线连接到板子上,设置好主机端的文件和参数即可进行USB烧录。

    特别提示:这个工具的适用场景,不是什么工作也没做,就想直接启动板子进行烧录;而是在你完成了整个系统移植过程后,可以使用该工具来进行USB启动烧录。换言之:若要使用Uniflash,必须要先完成Linux部分的移植。下面会对这个原因进行详细的解释。

    两个常见问题

    如果连上了USB,发现PC机都没有识别出板子:首先,确认板子用于启动的USB0的电路设计,必须要能工作在USB device的模式上。再者,确认你的PC机有权限进行USB操作,并且一定要把防火墙关掉。

    如果是连上了板子,能发现,但是烧录出现卡在0%,Flash in progress的情况,多数都是因为启动文件的编译配置有问题,这也是今天要讲的重点。我之前写过一个帖子,介绍了这个PC环境的搭建和文件的制作流程:

    http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/52381.aspx

    这里,我要重申刚才提到的一点:若要使用Uniflash,必须要先完成Linux部分的移植!

    因为Uniflash的工作原理是使用USB先传送移植好的SPL(MLO)和u-boot.img到板子上,让板子启动起来,然后在uboot环境下(如果是eMMC就需要到kernel下),通过debrick脚本来进行文件的传送、烧录(此时传送的文件因为只是image,所以不管是Linux/Android/RTOS都可以)。所以刚开始传送的用以启动板子的SPL(MLO)和u-boot.img,必须要基于Linux移植完成才可以正常使用,否则Uniflash就会出现卡在0%,Flash in progress的情况。

    所以,对于那些想使用该工具进行烧录的Android,RTOS的用户,就需要多做一步,就是要先移植Linux的uboot,以确保板子可以正常启动,我在上面的帖子中也有提过大致的流程,按照下面流程做了之后,建议先使用SD卡或者其他的启动方式,把移植好的image先尝试启动一下,确保这个步骤是没有问题的,然后就可以进行烧录了。

    非Linux用户的移植简介:

    由于该Uniflash工具也可以烧写Android,RTOS等非Linux操作系统的image,这里有一些简单的tips,方便那些使用非Linux的客户,更快速的将Uniflash的烧写环境搭建起来,下文以NAND flash作为示例:

    1. 首先由于Uniflash必须要使用Linux的Uboot作为烧写固件的一部分,所以请先下载AM335x Linux SDK 6.0开发包:http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/latest/index_FDS.html

    2. 下载完成后在Linux主机上进行安装,安装完成后,根目录下的board-support/u-boot-2013.01.01-psp06.00.00.00文件夹即为Linux uboot的源码,需做部分修改后编译。编译方法可参考:http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User%27s_Guide

    3. Linux uboot需要修改的部分:这部分工作就是对Linux uboot进行移植的工作,主要修改的有三处地方:EEPROM, DDR2/3, NAND FLASH(包括pinmux)

    3.1 对于EEPROM操作的修改:由于在官方的开发板上,都会有EEPROM来进行板子的型号辨识,不同板子资源不同,配置也就不同,因此该处的配置会影响到DDR的配置以及NAND flash的配置;一般来说客户自己的开发板上没有eeprom,所以要对此处进行修改。文件位置:uboot的根目录/board/ti/am335x/board.c文件中搜索"eeprom“既可找到配置的地方。

    3.2 对于DDR的配置的修改:因为板子上可能使用DDR2或者DDR3,要根据实际情况对UBOOT进行修改。在uboot的根目录/board/ti/am335x/board.c文件中搜索"config_ddr“既可找到配置的地方。

    3.3 对于NAND FLASH的修改:这里最常遇到的问题是,选择的板卡并没有对NAND flash进行Pinmux的设置,简单的解决方法是:在uboot/board/ti/am335x/mux.c文件中,在 void enable_board_pin_mux (struct am335x_baseboard_id *header)这个函数实现的第一句中加入

    configure_module_pin_mux(nand_pin_mux); 确保nand的Pinmux配置成功。对于NAND Flash的位宽配置,时序参数配置,可参考TRM中的7.1 GPMC章节。其中,常用的NAND位宽配置(8bit和16bit)在GPMC_CONFIG1的13-12bit位上。

  • 4. AM335x的休眠唤醒调试

    最近遇到了几个休眠唤醒的case,正好借这个机会做一个总结:

    我们知道AM335x支持多种低功耗模式,其中在TRM中有非常详细的介绍。这里我们着重介绍Deepsleep0这种模式,也被称作suspend mode,因为很多人在做低功耗的设计时,都会考虑让芯片的功耗能达到最低,而suspend模式下AM335x的单芯片功耗是可以达到5mW的,可以说还是能让大部分场景满意的。特别说明下,我说的5mW是指单芯片功耗,不包括外设以及电源效率。实测数据,可以参考下面的链接,这些都是基于GPEVM板上对每一个电源轨做出的实际测试数值:

    http://processors.wiki.ti.com/index.php/AM335x_Power_Consumption_Summary

    接下来让我们进入正题,如果你的芯片休眠有问题,如何测试,首先先按照我们给的这个链接进行一下相关的排查工作。

    processors.wiki.ti.com/.../Debugging_AM335x_Suspend-Resume_Issues

    对于Deepsleep0(suspend)模式无法正常工作,一定要确认到地是睡下去了,还是没能唤醒。可以通过下面两个地方进行确认:

    1. 主时钟:OSC0 is disabled at the end of suspend and enabled at the first step of resume. 

    2. DDR CKE信号:CKE signal goes low when DDR is put in self-refresh in suspend and goes high when DDR goes out of self refresh in resume.

    多数情况下,都是在没睡下去发生的问题。如果是通过上面两个信号确认是没睡下去,以下几点可以作为重点排查对象:

    1. DDR3的设计和配置。在DDR3的设计中一定要注意VTT的设计,如果有设计VTT,在休眠时,要注意是否使用了GPIO口来控制该VTT的使能。如果没有做GPIO的控制,也就是你在休眠的时候VTT也是在正常工作的,那么你需要在sleep33xx.S这段汇编中注释掉VTP处理部分的代码,否则会有一定概率出现suspend挂死的情况。如果是使用了GPIO控制VTT(在休眠时可以关掉),或者没有VTT设计的话,就只需要正确的对DDR3进行配置即可。

    2. GPIO的设置,如果是deepsleep0模式,能够唤醒的GPIO只能是位于GPIO0组。选择了GPIO0组对应的IO后,一定要配置他的使能,和休眠唤醒的属性,参考我们的SDK6.0的代码如下:

    3. RTC的处理:

    由于设置internal RTC disabled,而在kernel中没有取消register。

    解决方法:

    (1)需要在.config中注释掉以下设置:CONFIG_RTC_DRV_OMAP

    具体实现,需要在menuconfig中的Device driversàReal Time Clock中去掉选中。

    (2)在HWMOD中取消RTC部分的注册

    在linux源码的arch/arm/mach-omap2/omap_hwmod_33xx_data.c中进行修改:

    在结构体中am33xx_hwmods[]

    注释掉:

    /* rtc class */

          &am33xx_rtc_hwmod,

    (3)注释掉你在board-support/linux-3.2.0-psp04.06.00.11/arch/arm/mach-omap2/board-am335xevm.c文件中使用结构体中的相关RTC配置,类似如下:

    {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_NONE},

     如果还是有问题,就需要通过代码来定位现在卡住的位置了。这部分后面再做详解。

  • 5. AM335x最小文件系统

    一般来说,在我们官方发布的Linux SDK开发包中都带有两个文件系统,一个是组件全的(ti-sdk-....),一个是组件空的(arago-base...)。全的大概有300M+的样子,即使是那个小的,也大概有30M+的样子。

    所以相信很多朋友在最终做产品的时候都会有这样的需求,剪裁文件系统到10M左右的大小甚至更低,这时候就需要大家自己努力了。

    最近在debug其他的问题的时候因为必须要搞个小的文件系统,所以在网上找了找,发现给uniflash烧录eMMC的文件系统大小还是挺合适的,适用于SDK6.0D的才11M左右,新版本PDK用的才7.4M。

    亲测了一下SDK6.0的做基本的一些启动功能,和休眠唤醒都没有什么问题,做成initramfs的时候整个uImage也就只有7.78M,做debug用再合适不过了。

    所以这里把资源share给大家

    Linux SDK 6.0 Filesystem:

    PDK Filesystem:

    另外偶然发现用busybox做文件系统的一个guide,不过是给OMAP35平台的,AM335x的应该也差不了太多。暂时没时间深究,留待之后有机会再深入理一下:

    http://processors.wiki.ti.com/index.php/Creating_a_Root_File_System_for_Linux_on_OMAP35x


  • 8. 这个楼层,我会专门用来更新在论坛上看到的有用的总结帖和问题贴。

    关于AM335X移植SDIO WIFI的简易教程

    http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/127565.aspx



  • AM335X经常出现电源短路问题
    您好!我们在设计中使用了AM335X器件(AM335xBZCZD),package Drawing是ZCZ的,该款器件的供电采用了独立的电源芯片TPS65217B,目前出现这么一个情况,当我板子上与AM335X无关的其他电源出现问题时,如VCC_3V3或者5V根本没有给AM335X供电,当VCC_3V3或者5V出现短路或者误操作的时候,甚至操作所涉及的电路与AM335X没有直接或者间接的联系(除了共地),就是这样都可能会导致AM335X的I/O电源短路!我想咨询一下这种情况之前是否有人反馈过?另这种情况是否是地传导引起芯片损坏还是怎么回事?盼复。谢谢!

  • 回复 sunshine Brilliant:

    目前我并没有经历过你说到的这种案例,但是有些案例,是在335x没上电的情况下,就有信号电平进去,导致芯片损坏的情况。所以如果你的电路中有些管脚是通过电阻下拉,你提的这种经过地传过去打坏片子,不是没有可能。

    注意AM335x的datasheet 5.1 Absolute Maximum Ratings 的note:如下

    (8) This parameter applies to all IO terminals which are not fail-safe and the requirement applies to all values of IO supply voltage.

    For example, if the voltage applied to a specific IO supply is 0 volts the valid input voltage range for any IO powered by that supply will be –0.5 to +0.3 V.

    Apply special attention anytime peripheral devices are not powered from the same power sources used to power the respective IO supply.

    It is important the attached peripheral never sources a voltage outside the valid input voltage range, including power supply ramp-up and ramp-down sequences.