完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在官网下了一个下载应用程序的NandWriter例程,希望能够通过这个程序将目标应用程序写入Nand Flash,我的NAND FLASH为MT29F4G16ABADAH4,和C6748 LCDK的应该一样。按理说应该不需要修改什么就能使用的(DDR2 SDRAM这里先不讨论,只讨论怎么操作FLASH),可是NAND_open函数就没正常运行。
在debug模式下,hNandInfo = NAND_open((Uint32)&NANDStart, DEVICE_BUSWIDTH_16BIT );返回为空,出现问题 进入函数里面观察,发现安装的确实是CS3 ,从地址0x62000000开始的 NAND FLASH,这里没问题 然后发现是NAND_open函数里面的LOCAL_flashGetDetails(hNandInfo)处出现了返回为NULL的值,显然问题出在这里了。 跳进LOCAL_flashGetDetails(hNandInfo)里面观察,从NAND FLASH读取信息 hNandInfo->dataBytesPerPage = (Uint16) (*((Uint32 *) (paramPageData+80))) & 0xFFFF; hNandInfo->spareBytesPerPage = (Uint16) (*((Uint16 *) (paramPageData+84))); hNandInfo->pagesPerBlock = (Uint16) (*((Uint32 *) (paramPageData+92))) & 0xFFFF; hNandInfo->numBlocks = (Uint32) (*((Uint32 *) (paramPageData+96))) * paramPageData[100]; hNandInfo->numColAddrBytes = (Uint8) ((paramPageData[101] >> 4) & 0xF); hNandInfo->numRowAddrBytes = (Uint8) (paramPageData[101] & 0xF); 这些内容完全与NAND FLASH的实际参数相吻合,这里也没问题 最后程序运行到LOCAL_flashGetDetails(hNandInfo)快要返回时,出现了问题。 已知,hNandInfo指的结构体类型为 LOCAL_flashGetDetails(hNandInfo)中出现问题的语句地方: // Check to make sure there are enough spare bytes to satisfy our needs if ((hNandInfo->numOpsPerPage * hNandInfo->spareBytesPerOp) > hNandInfo->spareBytesPerPage) return E_FAIL; 这里返回为E_FAIL,问题就在这里。后来确定hNandInfo->spareBytesPerOp有问题,在debug下,观察它的值等于hNandInfo->spareBytesPerPage(固定的64BYTES),所以出错了。 而hNandInfo->spareBytesPerOp的值的确定是根据判断条件确定的 而参数 hNandInfo->spareBytesPerOp(需要最终确定的值)、hNandInfo->hPageLayout->spareRegion.bytesPerOp都是不确定的,程序事先都对其没有赋值,虽然程序在刚开始进行了好像进行了初始化的操作,但实际并没有对这些参数赋值 问题1: 这个判断条件的参数hNandInfo->hPageLayout->spareRegion.bytesPerOp断电后再试验的值都是变化的,因为它需要和hNandInfo->spareBytesPerPage(固定值,64BYTES)比较后,才能断定hNandInfo->spareBytesPerOp的值,程序虽然初始化hNandInfo->hPageLayout = &DEVICE_NAND_PAGE_layout;,却没有具体赋值hNandInfo->hPageLayout ,因为DEVICE_NAND_PAGE_layout也只是定义了,没有赋值。按照提示语句 // Use device specific page layout and ECC layout hNandInfo->hPageLayout = &DEVICE_NAND_PAGE_layout; hNandInfo->hEccInfo = &DEVICE_NAND_ECC_info; hNandInfo->hBbInfo = &DEVICE_NAND_BB_info; hNandInfo->hChipInfo = DEVICE_NAND_CHIP_infoTable; 我是不是应该对DEVICE_NAND_PAGE_layout,DEVICE_NAND_ECC_info,DEVICE_NAND_BB_info,DEVICE_NAND_CHIP_infoTable都先赋值了?如果幅值这些结构体,那么hNandInfo->hPageLayout->spareRegion.bytesPerOp的值不确定问题就自然解决了,但是这些结构体(特别是里面的hPageLayout->spareRegion.bytesPerOp)又应该给什么值呢?跟用的NAND FLASH有关? 问题2: 我的NAND FLASH跟官方的LCDK的一样,在官方的device_nand.h中给了一些具体参数: 其中中间红色这三行,我在NAND FLASH MT29F4G16ABADAH4里也没有找到这类技术指标,这三个参数是怎么定的?还有,问题1的参数hNandInfo->hPageLayout->spareRegion.bytesPerOp是不是在DEVICE_NAND_MIN_SPAREBYTES_PER_OP(10)和DEVICE_NAND_MAX_SPAREBYTES_PER_OP (16)之间,随便选个数就可以了? |
|
相关推荐
7 个讨论
|
|
MT29F4G16ABADAH4是4Gbit即512Mbyte的device,大于128Mbyte.所以要通过device ID的第三者个字节来读取NAND信息。
根据L138 bootloader文档第4字节的解读为下表,则只支持8bit宽的大于128Mbyte的NAND device. 而MT29F4G16ABADAH4的第4字节为:0x56, 为16bit宽的。 所以这个NAND是芯片bootloader不支持的。 但是还是可以用作非boot用途的,这就要用户自己的程序对其进行识别与操作的。 你的nand writer程序是在哪下载的? http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
lifei639156 发表于 2019-1-22 19:36 Tony Tang MT29F4G16ABADAH4是符合ONFI standard的(Open NAND Flash Interface (ONFI) 1.0-compliant1),所以bootloader应该先从NAND parameters page读取设备信息,而不是从ID来读信息吧 你说的上面这种情况,不应该是当NAND FLASH不符合ONFI standard标准时,才去查看是否大于128M,以及ID是多少么 如果是你说的这样,那岂不是只要NAND FLASH大于128M,就无法从16bits的NAND FLASH 启动了么 还有,在官方提供的TMS320C6748 LCD Kit (Schematics, BOM , Layout, and Gerber Files) v.A7a 的原理图中,明确使用的就是MT29F4G16ABADAH4,而且还注上: BOOT DEVICE NAND FLASH BOOT BITS[4:1] 0111 还请您帮我再确认一下 ,究竟能不能从 MT29F4G16ABADAH4启动? |
|
|
|
|
|
客来看我可怜我看 发表于 2019-1-22 19:43 我在网上找到这个nand flash的手册里的ID是0xCC 不在bootloader支持列表里: http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
客来看我可怜我看 发表于 2019-1-22 19:43 也有可能是table 13 bit 6忘了加1的说明了,这个我确认一下。 Again,你的nand writer是哪下载的? http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
你找的只是Byte 1,不是Byte 4。 其次在符合ONFI标准下,应该先从NAND parameters page读取设备信息,而不是从ID来读信息吧,当设备不符合ONFI标准时,才有什么128M,查找ID等等之说吧? NAND WRITER是在https://sourceforge.net/projects/dvflashutils/?source=typ_redirect 下载的,OMAP_L138/CCS/NAND WRITER目录,里面只有一个文件nandwriter.c,然后我又在OMAP_L138/COMMON/include和OMAP_L138/COMMON/src下找了一些源文件和头文件,自己做了一个工程,编译通过 |
|
|
|
|
|
lifei639156 发表于 2019-1-22 20:07 其实就是在OMAP-L138_FlashAndBootUtils_2_40文件夹的NANDWriter下找了个nandwriter文件,加上几个.c和.h组合成的一个烧写工程。 http://www.deyisupport.com/cfs-file.ashx/__key/telligent-evolution-components-attachments/00-32-00-00-00-05-18-96/6478nandw.rar这里也有一个工程,好像跟我组合的这个工程差不多,具体怎么连接到的这里的,我也忘了,应该都差不多吧 刚才我分析了一下,好像我的问题(不能把数据写入nand flash)好像是需要把下面这些结构体先初始化一遍。 // Use device specific page layout and ECC layout hNandInfo->hPageLayout = &DEVICE_NAND_PAGE_layout; hNandInfo->hEccInfo = &DEVICE_NAND_ECC_info; hNandInfo->hBbInfo = &DEVICE_NAND_BB_info; hNandInfo->hChipInfo = DEVICE_NAND_CHIP_infoTable; 至于MT29F4G16ABADAH4,应该可以当成启动吧,官方给的原理图好像也是这么设计的? |
|
|
|
|
|
客来看我可怜我看 发表于 2019-1-22 20:36 http://e2e.ti.com/support/dsp/omap_applications_processors/f/42/t/566285 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
TMS320F28377D:新做了以377d为芯片的板子,上电后芯片复位引脚出现方波请问如何解决?
1898 浏览 0 评论
TPS55340通电后输入端保险丝烧断,芯片输入和GND之间短路
3648 浏览 4 评论
5032 浏览 0 评论
请问如何用DM368对RGB格式的图片数据进行编码生成JPEG格式图片?
1736 浏览 1 评论
9382 浏览 8 评论
CC3100BOOST使用CC3200lunchXL进行烧录
669浏览 2评论
714浏览 1评论
TMS320F28034: 利用C2prog通过SCI给TMS320F28034烧录程序,出现错误提示:Bootloading... failed (invalid echo)!
676浏览 1评论
求DLPC350 Programmer’s Guide User's Guide 中文版说明书
1199浏览 1评论
1774浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-25 20:38 , Processed in 0.717204 second(s), Total 71, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号