`
mmdev
  • 浏览: 13428213 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

AML8613 MBOX系统下更换SPI Flash后无法烧录调试的问题

 
阅读更多
AMLogic的8613 MBOX是一个非常不错的视频播放系统,稳定、成熟度高,成本也较低。其开发的AVOS应该是基于uC/OS内核做的,运行效率很高。其开发的模式也很有意思,没有文档,网上也找不着资料,只能手把手地教,甚至连它的开发环境也只能到其公司去安装。开发过程中遇到问题是常有的事,有时只能自己摸索。前几天我自己就遇到个SPI问题,在这里记录一下供参考。
起因是换了一个开发板。这块新板的SPI-Flash的型号跟原板不同,原板的是25x32VSIG,新板是N25S32-75HE,测试的结果是可以调试,但烧录时瞬间假烧完成,重新上电没反应。问AML那边的支持,答曰可能不支持该型号,底层驱动的代码只有原厂才有无法获取修改,建议换SPI。
于是买了跟原板一样的25x32SPI换上去,但不知是不是硬件不兼容,这次索性连调试都无法进行了,直接下载完就校验出错。把原板的SPI拖下来,焊到新板上,问题依旧。
换回新板N25S32的SPI,调试跟踪,发现是打开SPI设备时出错了,尝试调用SPIGetDevice()获取设备信息,结果是返回空。意思是没有找到支持的SPI设备。因为系统支持的SPI已经在bsp.c里列明了,只支持以下几种:
SPISupport(&spi_w25x16);
SPISupport(&spi_w25q16);
SPISupport(&spi_mx25l3205d);
SPISupport(&spi_w25x32);
SPISupport(&spi_w25x16V);
SPISupport(&spi_MX25L800);
SPISupport(&spi_en25b32b);
SPISupport(&spi_MX25L160);
SPISupport(&spi_en25f32b);
另外spi_flash.h里还有几种SPI的声明,但经测试加入系统后仍然无法识别N25S32。
为了探明SPI的识别原理,找出各型号SPI的区别,我写了一个函数,将系统能支持的SPI的所有信息全打印出来。spi_flash.h里有SPI结构的定义:
typedef struct{
unsigned deviceId;
char* chipname;
unsigned chip_size; // chip size in byte
unsigned block_size;
unsigned sector_size;
SpiFlashOpResult (*erase_chip) (SpiFlashDevice *device);
SpiFlashOpResult (*erase_block)(SpiFlashDevice *device, unsigned block_num);
SpiFlashOpResult (*erase_sector)(SpiFlashDevice *device, unsigned sector_num);
SpiFlashOpResult (*write_address)(SpiFlashDevice *device, unsigned spiaddr, unsigned *src_addr, int len);
SpiFlashOpResult (*read_address)(SpiFlashDevice *device, unsigned spiaddr, unsigned *dest_addr, int len);
int (* get_sector_num)(SpiFlashDevice *device,unsigned spiaddr);
void *fs_offset;
unsigned fs_kb;
}SpiFlashChip;
其中很明显,erase_chip、erase_block、write_address等函数是一样的,在spi_flash.h里有相应的实现。我们只需要打印其它信息:
//added by huz
int spi_info_i=0;
void print_spi_info(const SpiFlashChip * spi)
{
if(spi==NULL)
{
printf("spi is null/n");
return;
}
spi_info_i++;
printf("spi_%d info :/n",spi_info_i);
printf("deviceId: %d (HEX:%X)/n",spi->deviceId,spi->deviceId);
printf("chipname: %s/n",spi->chipname);
printf("chip_size: %d/n",spi->chip_size);
printf("block_size: %d/n",spi->block_size);
printf("sector_size: %d/n",spi->sector_size);
printf("fs_offset: %X/n",((int)spi->fs_offset));
printf("fs_kb: %d/n/n",spi->fs_kb);
}
void print_spi_infos()
{
printf("by huz - spi infos:/n/n");
print_spi_info(&spi_w25x16);
print_spi_info(&spi_w25q16);
print_spi_info(&spi_mx25l3205d);
print_spi_info(&spi_w25x32);
print_spi_info(&spi_w25x16V);
...
print_spi_info(&spi_s25fl032p);
}
运行结果,在JTAG调试时输出如下:
by huz - spi infos:
spi_1 info :
deviceId: 1388783 (HEX:1530EF)
chipname: WINBOND W25X16
chip_size: 2097152
block_size: 65536
sector_size: 4096
fs_offset: 1FF000
fs_kb: 4096
spi_2 info :
deviceId: 1392879 (HEX:1540EF)
chipname: WINBOND W25Q16
chip_size: 2097152
block_size: 65536
sector_size: 4096
fs_offset: 1FF000
fs_kb: 4096
spi_3 info :
deviceId: 1450178 (HEX:1620C2)
chipname: MX25L3205D
chip_size: 4194304
block_size: 65536
sector_size: 4096
fs_offset: 3FF000
fs_kb: 4096
spi_4 info :
deviceId: 1454319 (HEX:1630EF)
chipname: WINBOND W25X32
chip_size: 4194304
block_size: 65536
sector_size: 4096
fs_offset: 3FF000
fs_kb: 4096
spi_5 info :
deviceId: 1388783 (HEX:1530EF)
chipname: WINBOND W25X16V
chip_size: 2097152
block_size: 65536
sector_size: 4096
fs_offset: 1FF000
fs_kb: 4096
...
spi_17 info :
deviceId: 1376769 (HEX:150201)
chipname: SPANSION S25FL032P
chip_size: 4194304
block_size: 65536
sector_size: 4096
fs_offset: 3F0000
fs_kb: 65536
很显然,deviceId和chipname是决定SPI型号用的,而deviceId应该是关键,每个SPI的deviceId都不一样,系统初始化时应该是会把支持的SPI的deviceId轮询一次,如果有响应的话则说明对应型号的SPI接到系统上了。
于是在网上查了下N25S32-75HE的资料,其中有设备ID的说明:
跟上述打印的信息一比较,显然我们需要的设备ID是0x1630D5。于是手工增加了一个SPI的定义:
const SpiFlashChip spi_N25S32XX={
0x1630d5,
"QTHUZ N25S32",
(32/8)*1024*1024,
65536,
4*1024,
SPIEraseChip,
SPIEraseBlock,
SPIEraseSector,
SPIWrite,
SPIRead,
SPIGetSectorNum,
(void *) 0x3ff000,
4*1024, };
SPISupport(&spi_N25S32);
接着运行,发现用SPIGetDevice()确实能找到SPI了。于是修改了代码,满怀希望地开始烧录,但最终仍然是写入失败,断点停在一个写参数的位置。
分析了一下原因,这时除了chipname,其它参数都是相当正确的。由于没有SPI的驱动代码,也无法判断原因,只能猜测是AML做了什么手脚。
由于N25S32的芯片号称是跟W25X32兼容的,于是我又想到,如果直接用W25X32的定义,强制在内存中修改其设备ID,也许可以骗过AML。说干就干,我在SPI初始化前加入以下代码:
int devid=0x1630d5;
memcpy((void*)&(spi_w25x32.deviceId),(void*)&devid,4);
再次运行,用SPIGetDevice()获取并打印SPI信息如下:
spi_1 info :
deviceId: 1454293 (HEX:1630D5)
chipname: WINBOND W25X32
chip_size: 4194304
block_size: 65536
sector_size: 4096
fs_offset: 3FF000
fs_kb: 4096
呵呵,W25X32的设备ID被修改成0x1630d5。接着修改代码执行烧录,这次终于烧录成功:
>make prom
Using Sun Microsystems Inc. Java version 1.6.0_06 on Windows.
Welcome to the GUI version of the MetaWare Debugger, v8.2.5 (1362).
License SeeCode expires
USB JTAG Firmware (Ver1.04) / DLL (Ver1.05)
Parallel port driver (gportio.sys) version 4 (fast) detected.
ELF segment #0 addr 0x3800000 size 0x000130 .
ELF segment #1 addr 0x3800500 size 0x370b14 ................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
.........
ELF segment #1 addr 0x3b71014 zero 0x024f30 (program zeroes BSS)
[1] Progress display created was 10920e28
License SC_AC expires
Added by huz - Burn start...
spi_1 info :
deviceId: 1454293 (HEX:1630D5)
chipname: WINBOND W25X32
chip_size: 4194304
block_size: 65536
sector_size: 4096
fs_offset: 3FF000
fs_kb: 4096
by huz - open source: /dev/ramdisk0
by huz - loop segs
by huz - open target: /dev/spi
by huz - upgrade start...
upgrading in progress 99%
by huz - clean memory
by huz - exiting...
by huz - Burn OK, can power down now.
Shutting down all processes...Done
重新上电,终于在视频输出上看到亲切的开机界面了。
分享到:
评论

相关推荐

    AML8613芯片完整资料

    AML8613芯片是一款专为多媒体播放器设计的高性能处理器,广泛应用于MP5播放器和MBOX设备中。这款芯片以其强大的视频和图像处理能力而闻名,支持多种媒体格式,如RMVB、MP4、JPEG和PNG,使得它在数字娱乐领域具有较高...

    AML8613 DOWNLOAD程序详解

    AML8613 DOWNLOAD程序详解主要涉及的是AMLOGIC公司的一款芯片AML8613的固件下载流程和技术细节。AMLOGIC是一家知名的半导体公司,专注于多媒体处理解决方案,其产品广泛应用于电视、机顶盒、智能音箱等设备。AML8613...

    AML8613_UserGuide V0.5.pdf

    AML8613具有先进的视频和图片处理能力,能够实现高质量的视频播放和图像渲染,适用于高清视频解码和图像后处理。 #### 音频处理 除了视频处理,该处理器还专注于音频处理,能够提供清晰、高保真的音频输出,支持...

    AML8613公板支持文件表

    ### AML8613公板支持文件表详解 #### 一、概述 根据提供的“AML8613公板支持文件表”信息,我们可以深入分析该公板所支持的各种功能和技术特性。AML8613是一种专为多媒体播放设备设计的高性能处理器,特别适用于...

    aml8613 spec

    AML8613提供了多种视频输出接口,如HDMI、VGA等,支持将处理后的视频信号传输到显示设备上。 ##### 4.5 周边设备 除了上述接口外,AML8613还配备了智能卡接口、USB接口等周边设备接口,用于扩展更多的功能和服务。...

    AML8613 PDF

    HDMI转VGA带音频原理图

    AML8726 驱动程序adb_USBDriver.rar

    总的来说,AML8726驱动程序adb_USBDriver.rar提供的是一个必不可少的组件,确保AML8726设备能在Windows环境下与Android开发环境顺畅通信,从而加速和简化了开发、测试和调试过程。对于使用AML8726平台的开发者来说,...

    aml7228用户手册

    ### AML7228 用户手册关键知识点解析 #### 一、引言 **AML7228** 是一款专为各类音频/视频解码应用设计的高度集成系统,旨在为液晶电视(LCD TVs)和便携式媒体播放器提供强大的处理能力。该处理器支持与硬盘驱动...

    晶晨U盘烧录IMG文件的方法

    把 aml_autoscript aml_sdc_burn.ini 和要烧录的 img文件 (重命名 update.img ) 总共三个文件放到U盘 将U盘 接到盒子上 连续按遥控MENU键 或者 用牙签顶住 盒子底壳的小孔 上电开机 触发升级 在界面上会看到升级...

    AML AVL学习资料

    《AML AVL学习资料》是关于Windchill系统中AML(Attribute Management Language)和AVL(Attribute Value List)的深入学习资源,主要以PDF格式呈现。这些技术是PTC(Parametric Technology Corporation)旗下的PDM...

    amlogic AML8726-M datasheet

    AML8726-M是Amlogic公司推出的一款基于Cortex-A9内核的系统级芯片(SoC),常用于多媒体设备、智能电视盒等产品。 datasheet是半导体行业中用来详细描述集成电路特性的技术文档,它提供了芯片的关键参数、功能、电气...

    Aras Innovator AML编辑器

    Aras Innovator AML编辑器是一款专为IT专业人士设计的高级建模语言(AML)编写工具,它提供了客户端的智能化操作界面,旨在提升用户在创建、编辑和管理AML模型时的效率与精确度。AML(Advanced Modeling Language)...

    AML8726-M3

    AML8726-M3支持DDR3 SDRAM,并配备了NAND/NOR FLASH存储器接口,确保了高速数据传输和大容量存储需求的满足。 #### 多媒体输入/输出接口 该处理器集成了全面的音频/视频输入/输出接口,包括LVDS/mini-LVDS面板接口...

    暴风AML-962H芯片2G+16G升级步骤教程.pdf

    ### 暴风AML-962H芯片2G+16G升级步骤教程 #### 一、本地升级(可开机进入系统设置升级) 对于具备基本操作能力且设备能够正常开机进入系统的用户而言,本地升级是一种较为简便的方式。 1. **准备ROM包**: - ...

    AML8726-H datesheet

    ### AML8726-H A/V 处理器知识点详解 #### 一、简介 AML8726-H是一款高性能的音频/视频解码器,作为新一代集成系统,主要面向高端音频/视频解码应用领域。该处理器特别适用于高清便携式多媒体播放器等设备。它集成...

    AML8726资料

    AML8726-MX配置信息显示,该芯片的发布日期为2013年6月5日,并且操作系统支持Android Jelly Bean版本4.1.1。 AML8726-MX支持一系列外围设备,这些设备包括音频编解码器、摄像头、以太网适配器、传感器等。这些外围...

    晶晨固件烧录工具Amlogic USB Burning Tool v3.1.0

    7. **等待完成**:烧录完成后,工具会显示成功信息,此时可以断开设备并重启,设备将自动应用新的固件。 **注意事项** 1. 烧录前备份原有固件,以防不测。 2. 确保设备电源充足,防止因电量不足导致烧录中断。 3. ...

    Aml环境下智能家居控制系统的设计与实现.pdf

    根据给定文件信息,本文将深入探讨"Aml环境下智能家居控制系统的设计与实现"这一主题,并从中提炼出相关的IT知识点。 ### Aml(环绕智能)简介 Aml(Ambient Intelligence),即环绕智能,是由欧洲信息社会咨询组...

    AML程序-(切图程序)

    AML(Arc Macro Language)是Esri公司的ArcInfo Workstation中的一种脚本语言,用于自动化GIS(地理信息系统)操作。在“AML程序-(切图程序)”这个主题中,我们将深入探讨AML在地理信息处理中的应用,特别是如何...

    AML声速仪技术操作手册

    AML声速仪技术操作手册是AML Oceanographic公司推出的一款高级海洋声学测量设备的手册,主要针对声速仪的操作和使用进行详细说明。手册包含了多个关键领域的信息,如CTD(海水导电率、温度、深度)测量、声呐技术...

Global site tag (gtag.js) - Google Analytics