4720|0

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C6678 spi测试不通过 [复制链接]

芯片为C6678,SPI NOR FLASH型号为N25Q128A11ESF40F,板子是自己设计的。目前只有I2C和GPIO测试通过了。测试SPI时候遇到很多问题,以下是SPI测试过程的一些记录。本人软件基础比较薄弱,希望大神帮忙分析下。
1.   最初启动配置为SPI启动模式,运行SPI测试例程时提示DDR3 Leveling failed,后来看了论坛说要修改DDR3的初始化参数,按照官网提供的表格修改后没有再提示Leveling failed。
2.   但是SPI测试程序跑不通。后来看SPI的测试文档说要改为no boot mode。
3.   之后将启动方式修改为no boot mode,程序编译完加载的时候提示如下:
C66xx_0: GEL Output: Setup_Memory_Map...
C66xx_0: GEL Output: Setup_Memory_Map... Done.
C66xx_0: GEL Output:
Connecting Target...
C66xx_0: GEL Output: DSP core #0
C66xx_0: GEL Output: C6678L GEL file Ver is 2.005
C66xx_0: GEL Output: Global Default Setup...
C66xx_0: GEL Output: Setup Cache...
C66xx_0: GEL Output: L1P = 32K  
C66xx_0: GEL Output: L1D = 32K  
C66xx_0: GEL Output: L2 = ALL SRAM  
C66xx_0: GEL Output: Setup Cache... Done.
C66xx_0: GEL Output: Main PLL (PLL1) Setup ...
C66xx_0: GEL Output: PLL in Bypass ...
C66xx_0: GEL Output: PLL1 Setup for DSP @ 1000.0 MHz.
C66xx_0: GEL Output:            SYSCLK2 = 333.3333 MHz, SYSCLK5 = 200.0 MHz.
C66xx_0: GEL Output:            SYSCLK8 = 15.625 MHz.
C66xx_0: GEL Output: PLL1 Setup... Done.
C66xx_0: GEL Output: Power on all PSC modules and DSP domains...
C66xx_0: GEL Output: Security Accelerator disabled!
C66xx_0: GEL Output: Power on all PSC modules and DSP domains... Done.
C66xx_0: GEL Output: PA PLL (PLL3) Setup ...
C66xx_0: GEL Output: PA PLL Setup... Done.
C66xx_0: GEL Output: DDR3 PLL (PLL2) Setup ...
C66xx_0: GEL Output: DDR3 PLL Setup... Done.
C66xx_0: GEL Output: DDR begin (1333 auto)
C66xx_0: GEL Output: XMC Setup ... Done
——————————————————————————————
C66xx_0: GEL Output:
DDR3 initialization is complete.
C66xx_0: GEL Output: DDR done
C66xx_0: GEL Output: DDR3 memory test... Started
C66xx_0: GEL Output: DDR3 memory test... Failed
C66xx_0: GEL Output: Main PLL (PLL1) Setup ...
C66xx_0: GEL Output: PLL not in Bypass, Enable BYPASS in the PLL Controller...
C66xx_0: GEL Output: PLL1 Setup for DSP @ 1000.0 MHz.
C66xx_0: GEL Output:            SYSCLK2 = 333.3333 MHz, SYSCLK5 = 200.0 MHz.
C66xx_0: GEL Output:            SYSCLK8 = 15.625 MHz.
C66xx_0: GEL Output: PLL1 Setup... Done.
C66xx_0: GEL Output: PA PLL (PLL3) Setup ...
C66xx_0: GEL Output: PA PLL Setup... Done.
C66xx_0: GEL Output: DDR3 PLL (PLL2) Setup ...
C66xx_0: GEL Output: DDR3 PLL Setup... Done.
C66xx_0: GEL Output: DDR begin (1333 auto)
C66xx_0: GEL Output: XMC Setup ... Done
—————————————————————虚线之间部分循环十次
C66xx_0: GEL Output:
SGMII SERDES has been configured.
C66xx_0: GEL Output: Enabling EDC ...
C66xx_0: GEL Output: L1P error detection logic is enabled.
C66xx_0: GEL Output: L2 error detection/correction logic is enabled.
C66xx_0: GEL Output: MSMC error detection/correction logic is enabled.
C66xx_0: GEL Output: Enabling EDC ...Done
C66xx_0: GEL Output: Configuring CPSW ...
C66xx_0: GEL Output: Configuring CPSW ...Done
C66xx_0: GEL Output: Global Default Setup... Done.
C66xx_0: GEL Output: Invalidate All Cache...
C66xx_0: GEL Output: Invalidate All Cache... Done.
C66xx_0: GEL Output: GEL Reset...
C66xx_0: GEL Output: GEL Reset... Done.
C66xx_0: GEL Output: Disable all EDMA3 interrupts and events.
4.   加载完成后运行
#define SPI_LOOPBACK_TEST               1
#define SPI_NOR_FLASH_TEST             1
#define SPI_EDMA_TEST                          1
上面这三个是最初选择的测试项,运行时提示
[C66xx_0] JTAG ID= 0x1009e02f. This is C6678/TCI6608 device, version variant = 1.
DEVSTAT= 0x00018200. big endian, No boot or EMIF16(NOR FLASH) or UART boot, PLL configuration implies the input clock for core is 50MHz.
SmartReflex VID= 50, required core voltage= 1.020V.
Die ID= 0x01013011, 0x04043ad2, 0x00000000, 0x7b160021
Device speed grade = 1000MHz.
Enable Exception handling...
Initialize DSP main clock = 156.25MHz/5x32 = 1000MHz
Initialize DDR speed = 156.25MHzx/15x128 = 1333.333MTS
ERROR: SPI format 1 speed higher than 66 MHz!

SPI internal loopback test at 858993MHz...
SPI loopback test passed with data pattern 0x0. Throughput= 20Mbps
SPI loopback test failed at word 0: TX 0xffff, RX 0x0
SPI loopback test failed at word 0: TX 0x5555, RX 0x0
此时发现loopback的时钟设置超过66MHz了,于是看了下在
spiCfg.dataFormat[1]= &loopbackDataFormat;
之后spiCfg.dataFormat[1]->clockSpeedKHz内并没有写入正确值(后来发现loopbackDataFormat内所有值都没正确赋给spiCfg.dataFormat[1])。这里不知道为什么。
没办法只能将SPI_Init()函数里面的三个结构体数组赋值处单独按DataFormat内容写一遍,如下:
spiCfg.dataFormat[0]= &FlashDataFormat;
spiCfg.dataFormat[0]->delayBetweenTrans_ns = 0;
spiCfg.dataFormat[0]->ShifDirection = SPI_MSB_SHIFT_FIRST;
spiCfg.dataFormat[0]->disable_CS_timing = 0;
spiCfg.dataFormat[0]->clockPolarity = SPI_CLOCK_LOW_INACTIVE;
spiCfg.dataFormat[0]->clockPhase = 1;
spiCfg.dataFormat[0]->clockSpeedKHz = 54000;
spiCfg.dataFormat[0]->wordLength = 8;

spiCfg.dataFormat[1]= &loopbackDataFormat;
spiCfg.dataFormat[1]->delayBetweenTrans_ns = 0;
spiCfg.dataFormat[1]->ShifDirection = SPI_MSB_SHIFT_FIRST;
spiCfg.dataFormat[1]->disable_CS_timing = 1;
spiCfg.dataFormat[1]->clockPolarity = SPI_CLOCK_LOW_INACTIVE;
spiCfg.dataFormat[1]->clockPhase = 0;
spiCfg.dataFormat[1]->clockSpeedKHz = 66000;
spiCfg.dataFormat[1]->wordLength = 16;

spiCfg.dataFormat[2]= &EdmaDataFormat;
spiCfg.dataFormat[2]->delayBetweenTrans_ns = 0;
spiCfg.dataFormat[2]->ShifDirection = SPI_MSB_SHIFT_FIRST;
spiCfg.dataFormat[2]->disable_CS_timing = 1;
spiCfg.dataFormat[2]->clockPolarity = SPI_CLOCK_LOW_INACTIVE;
spiCfg.dataFormat[2]->clockPhase = 0;
spiCfg.dataFormat[2]->clockSpeedKHz = 66000;
spiCfg.dataFormat[2]->wordLength = 16;
这回结构体数组内容对了,运行下:
SPI internal loopback test at 66MHz...
SPI loopback test passed with data pattern 0x0. Throughput= 20Mbps
SPI loopback test failed at word 0: TX 0xffff, RX 0x0
SPI loopback test failed at word 0: TX 0x5555, RX 0x0
SPI interrupt test: manually generate RX overrun error…
Loopback failed然后停住不动了。
5.   之后把EDMA测试去掉
#define SPI_LOOPBACK_TEST               1
#define SPI_NOR_FLASH_TEST             1
#define SPI_EDMA_TEST                          0
运行结果loopback通过了。。。什么情况
SPI internal loopback test at 66MHz...
SPI loopback test passed with data pattern 0x0. Throughput= 28Mbps
SPI loopback test passed with data pattern 0xffff. Throughput= 28Mbps
SPI loopback test passed with data pattern 0x5555. Throughput= 28Mbps
SPI interrupt test: manually generate RX overrun error...
但是中断测试那里又停住了。。。
6.   为了测试SPI Flash,把loopback测试里面的SPI_interrupt_test();屏蔽掉,再运行。
SPI internal loopback test at 66MHz...
SPI loopback test passed with data pattern 0x0. Throughput= 28Mbps
SPI loopback test passed with data pattern 0xffff. Throughput= 28Mbps
SPI loopback test passed with data pattern 0x5555. Throughput= 28Mbps

SPI NOR FLASH test at 30MHz...
Read SPI NOR FLASH ID = 0x48 0x17 0xa2
Save data from 0xf00000 to 0xf40000.
erase failed at 0xf00000
loopback过去了, NOR FLASH的ID读取错误,正确值应该为0x20 0xbb 0x18
降低时钟频率,再试:
SPI internal loopback test at 66MHz...
SPI loopback test passed with data pattern 0x0. Throughput= 28Mbps
SPI loopback test passed with data pattern 0xffff. Throughput= 28Mbps
SPI loopback test passed with data pattern 0x5555. Throughput= 28Mbps

SPI NOR FLASH test at 1MHz...
Read SPI NOR FLASH ID = 0xa1 0x11 0x9c 这里值不同了
Save data from 0xf00000 to 0xf40000.
erase failed at 0xf00000

有下面几个疑问:
(1)程序加载的时候提示的
C66xx_0: GEL Output: DDR3 memory test... Started
C66xx_0: GEL Output: DDR3 memory test... Failed
C66xx_0: GEL Output: PLL and DDR Initialization failed ...
是什么意思,leveling没成功?我是5片4Gbit的DDR3,是不是哪里设置不对。ECC不用的话DDR3焊5片的话会有影响吗?我的DDR3型号为MT41K256M16HA-107IT:E
(2)EDMA_TEST对loopback_TEST有影响吗,同时进行的时候LOOPBACK不成功是什么原因。
(3)spiCfg.dataFormat[0] = &FlashDataFormat;赋值不成功原因是什么?
(4)NOR FLASH的ID读取错误,找了半天不知道什么原因啊。根DDR3会有关系吗?
NOR FLASH型号与开发板不同,是N25Q128A11ESF40F,需要修改哪里吗?
C比较弱,读程序比较吃力,希望高手帮分析下。

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表