完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 2018-6-3 10:09 编辑
平台:AM335x Linux SDK :PROCESSOR-SDK-LINUX-AM335X(v03.01) 此SDK下载网址: http://www.ti.com/tool/processor-sdk-am335x 文章面向对象:ARM的初学者 或 SDK新版本初级使用者 文章base操作:在Linux平台成功安装上述的Linux SDK以及uboot成功编译。 若在安装或者编译有问题,请参考以下关于文章基础操作的教程link: http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_Getting_Started_Guide http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_U-Boot 文章内容:第一部分概括移植Linux的启动整体步骤; 第二部分会描述出厂固化在am335x的ROM code的作用、引导模式和执行流程; 第三部分描述SPL和Uboot的运行的位置和一下基础性知识; 最后就是重点:SPL、Uboot的流程图,以及DDR的内容分布。 由于SPL、Uboot的代码冗长和某些函数实现的功能复杂,所以分析SPL、Uboot的流程图,我主要是以”全而简”(全过程+简单分析)的角度进 行介绍,这样做的目的主要是让大家比较清晰地知道bootload在哪里在哪个文件在哪个函数实现什么功能,可以方便地让大家随时随地定位你想要 了解的功能的位置。 若在细节上有任何疑问,可以根据我画的流程图方便查找和定位程序所在地,若仍然解决不了,欢迎大家可以在论坛上积极地提出来。谢谢! |
|
相关推荐
9个回答
|
|
具体的版本u-boot-201? 我用的最新版本ti-processor-sdk-linux-am335x-evm-03.03.00.04-Linux-x86-Install.bin 里面的u-boot-2016不一样 不知道在哪里可以下载你分析的版本
|
|
|
|
你好 我的板子是SD卡启动 用以前的版本 能启动u-boot 用最新的版本之后 插入SD卡之后就没反应 一点打印消息都没有 调试好几天了 不知道原因何在,拔掉SD卡后一直打印CCCCCC 望指点
|
|
|
|
60user62 发表于 2018-6-1 09:30 下载 :http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/03_02_00_05/index_FDS.html 其实两个版本相差不大,我的分析流程仍然可以在你的下载的版本进行参考 |
|
|
|
60user62 发表于 2018-6-1 09:49 是自己做的板子还是TI EVM 板?参考我之前发过的帖子 http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/128026.aspx?pi239031348=1 |
|
|
|
请教AM335X基于StarterWare的启动问题,
bootload 是否可以做成可以MMCSD卡和NAND启动? 将启动设置00100,AM335X先检测从SD卡启动,如果没有SD卡后从NAND启动。 bootload中PLO判断是否从SD卡启动,如果从SD卡启动就将PLO和app复制分别拷贝到nand的0地址和512*1024地址后,再拷贝到0x8000000启动, 如果没有检测到SD卡就直接从nand启动。 不知道是否已经有这样的启动方案,方便项目量产及程序升级! 不知道这样是否行得通,请求给建议! |
|
|
|
bertvwang 发表于 2018-6-1 10:34 你说的PLO是MLO吧 这个方案是可以的,记得初始化NAND,然后再拷贝 |
|
|
|
您好,就在原来的基础上加 nandInfo = BlNANDConfigure();初始化的NAND的函数,以后再添加了
/** * brief - Write bytes to NAND. * param - flashAddr - NAND Flash address.n. * param - size - Indicates the total size needs to be write to flash.n. * param - destAddr - Source address where data needs to be copy from.n. * * return none **/ void BlNANDWriteFlash (NandInfo_t *hNandInfo, unsigned int flashAddr, unsigned int size, unsigned char *srcAddr) [ unsigned int currBlock = 0xFFFFFFFF; unsigned int currPage = 0xFFFFFFFF; unsigned int pageSize = hNandInfo->pageSize; unsigned int blockSize = hNandInfo->blkSize; unsigned int bytesHasWrite = 0; unsigned int bytesToWrite = size; NandStatus_t retVal; /* Convert the flashAddr to block, page numbers */ unsigned int blkNum = (flashAddr / blockSize); unsigned int pageNum = (flashAddr - (blkNum * blockSize)) / pageSize; // Check the current block is whether GOOD until we are in a good block while (NANDBadBlockCheck(hNandInfo,blkNum) != NAND_BLOCK_GOOD) [ blkNum += 1; pageNum = 0; ] currPage = pageNum; currBlock = blkNum; // Erase falsh first! retVal = NANDBlockErase( hNandInfo, currBlock); if (retVal != NAND_STATUS_PASSED) [ while(1); ] // If we have one or more full blocks to copy, copy them directly // Any leftover data (partial page) gets copied via the memory buffer while (bytesHasWrite < bytesToWrite) [ memcpy ((void *)txData,(unsigned char *)&srcAddr[bytesHasWrite],2048); //CacheDataCleanBuff( (unsigned int) txData, 2048); //2015-10-29 retVal = NANDPageWrite( hNandInfo, currBlock, currPage,txData, &eccData[0]); if(retVal != NAND_STATUS_PASSED) [ while(1); ] bytesHasWrite += pageSize; currPage += 1; // Check to see if curr page is at end of a block if (currPage >= hNandInfo->pagesPerBlk) [ // If so, increment current block until we are in a good block do [ currBlock += 1; ] while (NANDBadBlockCheck(hNandInfo,currBlock)!= NAND_BLOCK_GOOD); // Erase flash first! retVal = NANDBlockErase( hNandInfo, currBlock); if(retVal != NAND_STATUS_PASSED) [ while(1); ] currPage = 0; ] ] ] 上面代码新加进去的,前面的拷贝都正常,我是现将MLO和app先拷贝到ddr里面,再调用上面函数拷贝到NAND的, BlNANDWriteFlash (nandInfo, 0, mlo_size, (unsigned char *)mlo_ddr_addr); 但是每次到 retVal = NANDPageWrite( hNandInfo, currBlock, currPage,txData, &eccData[0]);这里就死了,什么情况都搞不明白!我使用IAR软件调试仿真的! 这里都没有进去就死了(我已经把编译成库的文件全部合到工程里面,就是不使用库调用了) 望赐教!谢谢! |
|
|
|
您好,就在原来的基础上加 BlPlatformNANDSetup(); nandInfo = BlNANDConfigure(); 初始化的NAND的函数,以后再添加了 /** * brief - Write bytes to NAND. * param - flashAddr - NAND Flash address.n. * param - size - Indicates the total size needs to be write to flash.n. * param - destAddr - Source address where data needs to be copy from.n. * * return none **/ void BlNANDWriteFlash (NandInfo_t *hNandInfo, unsigned int flashAddr, unsigned int size, unsigned char *srcAddr) [ unsigned int currBlock = 0xFFFFFFFF; unsigned int currPage = 0xFFFFFFFF; unsigned int pageSize = hNandInfo->pageSize; unsigned int blockSize = hNandInfo->blkSize; unsigned int bytesHasWrite = 0; unsigned int bytesToWrite = size; NandStatus_t retVal; /* Convert the flashAddr to block, page numbers */ unsigned int blkNum = (flashAddr / blockSize); unsigned int pageNum = (flashAddr - (blkNum * blockSize)) / pageSize; // Check the current block is whether GOOD until we are in a good block while (NANDBadBlockCheck(hNandInfo,blkNum) != NAND_BLOCK_GOOD) [ blkNum += 1; pageNum = 0; ] currPage = pageNum; currBlock = blkNum; // Erase falsh first! retVal = NANDBlockErase( hNandInfo, currBlock); if (retVal != NAND_STATUS_PASSED) [ while(1); ] // If we have one or more full blocks to copy, copy them directly // Any leftover data (partial page) gets copied via the memory buffer while (bytesHasWrite < bytesToWrite) [ memcpy ((void *)txData,(unsigned char *)&srcAddr[bytesHasWrite],2048); //CacheDataCleanBuff( (unsigned int) txData, 2048); //2015-10-29 retVal = NANDPageWrite( hNandInfo, currBlock, currPage,txData, &eccData[0]); if(retVal != NAND_STATUS_PASSED) [ while(1); ] bytesHasWrite += pageSize; currPage += 1; // Check to see if curr page is at end of a block if (currPage >= hNandInfo->pagesPerBlk) [ // If so, increment current block until we are in a good block do [ currBlock += 1; ] while (NANDBadBlockCheck(hNandInfo,currBlock)!= NAND_BLOCK_GOOD); // Erase flash first! retVal = NANDBlockErase( hNandInfo, currBlock); if(retVal != NAND_STATUS_PASSED) [ while(1); ] currPage = 0; ] ] ] 上面代码新加进去的,前面的拷贝都正常,我是现将MLO和app先拷贝到ddr里面,再调用上面函数拷贝到NAND的, BlNANDWriteFlash (nandInfo, 0, mlo_size, (unsigned char *)mlo_ddr_addr); 但是每次到 retVal = NANDPageWrite( hNandInfo, currBlock, currPage,txData, &eccData[0]);这里就死了,什么情况都搞不明白!我使用IAR软件调试仿真的! 这里都没有进去就死了(我已经把编译成库的文件全部合到工程里面,就是不使用库调用了) 望赐教!谢谢! |
|
|
|
您好,您用nand启动的boot可以用吗,我也是使用startware的boot裸跑,不知道从nand启动的程序该如何写,向您请教下 |
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
661 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
587 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1041 浏览 1 评论
720 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
516 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
150浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
115浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
119浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
117浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
160浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 16:24 , Processed in 0.955315 second(s), Total 62, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号