DUALBOOT(双启动) 调试

这里说说XO3的双启动。首先你要知道什么是双启动?为什么要用双启动?双启动需要做什么设置?需要怎么调试?and so on.

在XO3来说,什么是双启动?双启动就是内部启动(内部flash)和外部启动(外部SPI flash),启动顺序可以在软件设置,如下图。DUALBOOTGOLDEN设置为EXTERNAL,指定备份文件为外部SPI Flash,先从内部启动,设置为internal,即内部是备份,先从外部启动。

下图说法有误,其实是可以设置的是内还是外先启动的,亲测可用。

为什么要用双启动?细想一下假如没有双启动,只要内部或者外部存储用户逻辑,但是用户逻辑被环境破坏了呢?怎么办?是不是没法用了?特别一些高温高压高辐射的特殊环境。有了双启动,坏了一个好有一个作为备胎使用。

双启动需要做什么设置?很简单,如下图。也好好理解,因为是外部SPI flsah和内部FLASH作为双启动(而且也仅有这么一种双启动模式XO3),所有LATTICE是作为主机去读取外部SPI FLASH 的数据,所有自然就要把MASTER_SPI_PORT设为ENABLE.

需要怎么调试?在此,把帮客户debug的过程share to us。

为了测试客户在了两份程序,一份放到内部FLASH,程序中会添加版本号叫做V001,一份放到外部SPI FLASH,程序中会添加版本号叫做V002,通过串口读取版本号就可以知道双启动是否成功。

用户做了如下的软件设置

客户大体测试了几种基本情况,如下


NO


CPLD内部flash


SPI Flash


加载方式


结果


说明


A


V001


不在位


重新上下电

PROGRAMMER REFRESH

PROGRAMN触发


V001


B


V001


在位但为BLANK


同上


V001


C


V001


V002


同上


V002


D


FLASH ERASE ONLY


V002


同上


未成功加载


E


FLASH ERASE CFG ONLY


V002


同上


未成功加载


F


FLASH ERASE CFG AND UFM ONLY


V002


同上


未成功加载

看到上面的测试结果了吧,AB是成功的,符合双启动预期,其他的都挂了。解释一下:

用户设置为EXTERNAL,指定备份文件为外部SPI Flash,即先从内部启动,A的时候是内部flash放了程序,外部spi flash把他扣下来(不在位),这样自然就是读到版本号V001了,B类同。C的测试结果就有问题,既然内外都放了程序,而且是内部先启动(内部启动失败就会外部启动,这个lattice芯片会通过CRC校验告知,不用为人干预),怎么读出来的版本号是V002,V002可是外部SPI flash的啊,正常应该是V001才对啊。

软件设置,硬件电路查了一个遍,没有问题。看现象感觉很像是C的JED被破坏了,所以没法启动,所以就启动到外部的,所以就得到V002,没办法只能读取C是的JED,对比A的JED,发现完全一样---说明C的JED没有被破坏----呵呵了。被人家RD鄙视一把,说你们LATTICE的东西真尼玛烂---人家大公司,我也不好说什么---只能继续查找问题--查啊查,中午都不得睡觉。

没地方怀疑了,就问他,你程序是通过夹具下载到SPI flash的还是通过我diamond放进去的的---他说夹具试了几把没成功,是通过diamond搞进去的。好请操作一般给我看看。我把关键部分截出来给大家审视一下。

看到他这一步操作,我就放心了,思路明就了了。懂的人都知道,这步骤应该是没办法加载外部SPI  FLASH的。思路明了了:貌似是外部SPI FLASH没有加载进去,就是空的一颗flsah,他那个步骤貌似只是重新加载了内部的flash。这样的猜想出来之后,他测试的结果都可以解释通了。首先解释他的C,因为他的步骤是重新加载了内部的flash,相当于之前的V001是被V002覆盖了,所以读出来版本号是V002。在看D,内部FLASH被他擦空,外部SPI FLASH有没有程序,所以启动失败正常,EF也是一样的道理。哈哈,毕竟只是猜想,而且感觉他们RD应该也不会傻到自己的外部FLASH是否有程序都不知道。那么做个测试验证一下,我想的到底对不对就知道了。

对症下药,既然怀疑外部flash是空的,读到的V002是被覆盖的结果,那么做第一个测试就可以验证了

1.针对C,我直接把外部FLASH取下来,假如还是读到V002,那么肯定说明就不是外部SPI FLASH读出来的,二是内部flash被覆盖的结果---测试结果,你猜猜,他们真的有这么傻,取下来之后,我还是读到V002,很显然说明是内部flash本覆盖了。加入不是被覆盖,外部spi flash被取下来了,应该读到V001才对----第一个验证,还不是很放心。

2.第二个测试,测试条件,内部flash擦空,外部flash按照他说的放V002的程序。然后读版本号----读出来了,结果脚毛都没有一根,显然验证了我的猜想,外部flash确实是空的。

3.经过两个测试可以确定是,他们RD没有把程序放到外部FLASH导致的,死活还不让我走。说一定要把上述情况验证通过之后才让我走。接下来的事情就简单了,仅仅是如何通过diamond把程序放到外部spi flash而已,截图给你们,如下图。要点:选择Bit,起始地址改为0x00010000

依据如下

做一个测试,看看刚才的操作是否将程序下载到了外部flsah中

1.测试条件,内部flsah擦空,外部flash放版本号为V001的程序---读取结果,本版好果然是V001,

2.不放心再来一个测试,内部flash擦空,外部flash放本版好为V003的程序------读取结果,本版好果然是V003,,

3,还不放心,那就极端点,外部flash擦空,外部直接卸下来--读取结果,毛都没有,这个说明刚才的操作确实是把程序加载到外部flash中了

然后各种教程测试一一验证,没有不通过的。

找问题花了好多时间,调试就是这样,问题的根源并不高深,高深的是找问题的过程,如何去发现问题,如何去猜想,如何去验证,等等。

附上

sysConfig配置说明(diamond3.8):

SDM_PORT=PROGRAMN,设置PROGRAMN管脚为专用SDM功能,以便控制器可以REFRESH CPLD。

SLAVE_SPI_PORT=DISABLE,禁用SSPI加载功能

I2C_PORT=DISABLE,禁用I2C加载功能

MASTER_SPI_PORT=ENABLE,允许从外部SPI Flash加载

COMPRESS_CONFIG=ON:加载BITSTREAM采用压缩方式

CONFIGURATION=CFG:加载程序位于内部Flash(不用UFM)

MY_ASSP=OFF:用于LatticeXP2

ONE_TIME_PROGRAM=OFF:允许内部Flash重复擦除和烧写

CONFIG_SECURE=OFF:用于LatticeECP2

MCCLK_FREQ=2.08

JTAG_PORT=ENABLE,JTAG专用

ENABLE_TRANSFER=DISABLE,禁用TRANSFER功能

SHAREDEBRINIT=DISABLE,共享EBR初始化文件

MUX_CONFIGURATION_PORTS=DISABLE,用于MachXO2

DUALBOOTGOLDEN=EXTERNAL,指定备份文件为外部SPI Flash

BACKGROUND_RECONFIG=OFF,禁止加载完成后、进行重新加载

如有疑问请联系QQ:825972925

时间: 2024-11-29 07:04:31

DUALBOOT(双启动) 调试的相关文章

无法自动进入单步执行服务器。未能调试远程过程。这通常说明未在服务器上启动调试

在进行UI界面修改的时候,出现了一个很大的问题,就是"无法自动进入单步执行服务器.未能调试远程过程.这通常说明未在服务器上启动调试",在进行远程调用的WCF调用的时候,出现的问题. 问题出现的原因: 是因为我们在源代码中修改了一些东西后,但在客户端调用的时候,一般使用配置文件中对WCF服务进行调用的: <endpoint address="http://localhost:5734/Service.svc?wsdl" binding="basicHt

(转)VS无法启动调试:“生成下面的模块时,启用了优化或没有调试信息“

中调试项目遇到错误提示,Visual Studio 2010(或VS2008或VS2005)启动调试的时候,弹出提示信息: 生成下面的模块时,启用了优化或没有调试信息: C:\WINDOWS\Microsoft.NET\Frameword\v2.0.50727\Temporary   ASP.NETFiles\3cmarket\bfbd519\8aA985a18\assembly\dl3\4051c514\d0da2e40_ba3ec701\Adcontrol.DLL若要调试此模块,请将其项目生

VS2003"无法启动调试 没有正确安装调试器"的解决办法

VS2003"无法启动调试 没有正确安装调试器"的解决方法 在用VS2003做项目的时候,经常调试程序,但是有时候回出现如下问题"无法启动调试,没有正确安装调试器,请运行安装程序或修复调试器".第一次碰到还以为是运气不好,就重新用vs2003安装程序重新修复了这个工具,可以使用了.但是运行了一段时间又出现了如上这种问题,郁闷了我很久.因为修复一下这个工具要花费很多时间的,于是从网上找了资料,把问题给解决了. 主要原因:大部分问题都是因为,mdm被损坏了导致的. 解决

无法在web服务器上启动调试。打开的URL的IIS辅助进程当前没有运行。

调试时弹出:无法在web服务器上启动调试.打开的URL的IIS辅助进程当前没有运行. 解决方法: 1.可能是计算机本身的身份验证没开启,:控制面板- >程序- >把Windows功能或关闭- >Internet信息服务——>万维网服务- >安全性- > 选中Windows身份验证: 2.可能是IIS上的身份验证没有开启,:Internet信息服务(IIS)管理器- >选中当前的网站- >打开身份验证- >启用windows身份验证:

Visual Studio 2015开发Android App启动调试始终无法完成应用部署的解决方案

创建一个Android App项目后,直接启动调试发现Visual Studio Emulator for Android已成功运行,但应用始终处于Build中(等待时间超过1小时),并未如预期通过adb部署到模拟器中.将应用直接导出apk,拖拽至模拟器直接部署,提示: File transfer failed. Error: Unable to install the file through Adb. Adb.exe not found. Make sure you have Android

解决&quot;vs2002/vs2003无法启动调试&quot;问题

有时候,在用VS2002或者VS2003编写软件时,按F5,却弹出"无法启动调试"的对话框,如图(1)所示: 图(1)"无法启动调试"对话框 产生这种情况的原因是,你的Machine Debug Manager服务被屏蔽了.可以用VS2002或者VS2003公共文件夹C:\Program Files\Common Files\Microsoft Shared\VS7Debug 里的mdm.exe来启动该服务.方法如下: 1.点击桌面右下角"开始"

VC解决方案,项目,开发一段时间启动调试很慢,半天才开始链接

笔者这两天写代码过程中,发现自己解决方案下的程序启动调试,半天才开始加载相关的各种库.导致调试的时候很是郁闷 开始以为是项目关联的工程太多导致,但是在相同的解决方案sln下面,新建一个简单的控制台程序同样启动很慢.而该控制台项目程序加载到其他的解决方案中,调试时很快 就开始加载各种库. 问题大致定位在解决方案本身的问题.具体原因没有找到,笔者暂时的做法是重新建立一个解决方案,把需要的工程加载进来,速度哗哗的上去了. VC解决方案,项目,开发一段时间启动调试很慢,半天才开始链接,布布扣,bubuk

无法在Web服务器上启动调试,已附加了一个调试器

运行环境:开发环境:Windows7旗舰版64bit.VisualStudio2008 With SP1.ArcEngine10.0.NetFrameWork4.0.IIS7和C#开发语言. 问题描述:ASP.NET调试时遇到的错误"无法在Web服务器上启动调试.已附加了一个调试器. 问题原因:我自己正在调试一个WebService,再次启动另外一个WebService调试则会报出这个错误,VS.NET不允许同时调试两个Web应用程序的. 无法在Web服务器上启动调试,已附加了一个调试器

无法启动调试。未安装Silverlight Developer运行时。最新运行时可以从以下地址下载: http://go.microsoft.com/fwlink/?LinkId=146060.

无法启动调试.未安装Silverlight Developer运行时.最新运行时可以从以下地址下载: http://go.microsoft.com/fwlink/?LinkId=146060. 解决方法: 先卸载Microsoft Silverlight, 然后再次安装改程序Silverlight_Developer.exe.