随着用户不断的增多,越来越多的对于资源方面的咨询,这里开一个主帖,各个楼层独立话题,把一些比较分散的资源做个汇总,方便大家索引。
另外,针对一些常见的问题,和疑难杂症之类的, 我也会更新到这个帖子中来。
大家有什么问题,或者想知道的某个话题,可以在这个帖子中给我留言,我会根据实际的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. 论坛用户总结搜集贴(包含外部资源链接)
Steven Liu1:
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.htmlAM335x Linux SDK 7.0
kernel 3.12
http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/07_00_00_00/index_FDS.htmlAM335x 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.htmlProcessor 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.htmlProcessor SDK 2.0.0
v4.1
http://software-dl.ti.com/processor-sw/esd/PROCESSOR-SDK-LINUX-AM335X/02_00_00_00/index_FDS.htmlProcessor 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.htmlProcessor 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.htmlProcessor SDK 3.0.0
v4.4.12
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/latest/index_FDS.html
Version
Linux Kernel
GCC
PROCESSOR-SDK-LINUX-AM335X
v06.01
v4.19
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/latest/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
06_00_00_07
4.19.38+ (2019 LTS)
8.3 2019.03 hard-float
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/06_00_00_07/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
05_03_00_07
4.14.79+ (2018 LTS)
Linaro Toolchain (gcc) 7.2-2017.11 hard-float
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/05_03_00_07/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
05_02_00_10
4.14.79+ (2018 LTS)
Linaro Toolchain (gcc) 7.2-2017.11 hard-float
2018.01
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/05_02_00_10/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
05_01_00_11
4.14.67+ (2018 LTS)
Linaro Toolchain (gcc) 7.2-2017.11 hard-float
2018.01
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/05_01_00_11/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
05_00_00_15
4.14.40+ (2018 LTS)
Linaro Toolchain (gcc) 7.2-2017.11 hard-float
2018.01
http://software-dl.ti.com/processor-sdk-linux/esd/docs/05_00_00_15/linux/Release_Specific.html#processor-sdk-linux-release-notes
PROCESSOR-SDK-LINUX-AM335X
04_03_00_05
4.9.69+ (2017 LTS)
Linaro Toolchain (gcc) 6.2.1 2016.11 hard-float
2017.01
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/04_03_00_05/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
04_02_00_09
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/04_02_00_09/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
04_01_00_06
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/04_01_00_06/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
04_00_00_04
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/04_00_00_04/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
03_03_00_04
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/03_03_00_04/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
03_02_00_05
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/03_02_00_05/index_FDS.html
PROCESSOR-SDK-LINUX-AM335X
03_01_00_06
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/03_01_00_06/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开始,到后面的Processor SDK,都是使用了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
下面关于不同版本的编译方法进行介绍:
如果使用的是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
Steven Liu1:
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的配置就算完成了,把上述配置的参数以及最优解设置到你的板级配置文件中即可。
Steven Liu1:
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位上。
Steven Liu1:
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},
如果还是有问题,就需要通过代码来定位现在卡住的位置了。这部分后面再做详解。
Steven Liu1:
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
Steven Liu1:
6. TBD
Steven Liu1:
7. TBD
Steven Liu1:
8. 这个楼层,我会专门用来更新在论坛上看到的有用的总结帖和问题贴。
关于AM335X移植SDIO WIFI的简易教程
http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/127565.aspx
sunshine Brilliant:
AM335X经常出现电源短路问题您好!我们在设计中使用了AM335X器件(AM335xBZCZD),package Drawing是ZCZ的,该款器件的供电采用了独立的电源芯片TPS65217B,目前出现这么一个情况,当我板子上与AM335X无关的其他电源出现问题时,如VCC_3V3或者5V根本没有给AM335X供电,当VCC_3V3或者5V出现短路或者误操作的时候,甚至操作所涉及的电路与AM335X没有直接或者间接的联系(除了共地),就是这样都可能会导致AM335X的I/O电源短路!我想咨询一下这种情况之前是否有人反馈过?另这种情况是否是地传导引起芯片损坏还是怎么回事?盼复。谢谢!
Steven Liu1:
回复 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.