做嵌入式DSP的技术开发,怎么去提问才能更快的获得解答(新手必看)

作者的话

OP在以前的ADI和现在OpenADSP开源社区前前后后做了近20年的技术支持,有一些关于技术问题提问的方式方法以及小技巧分享给初学者,希望能让初学者更快的获得更好的技术支持!

硬件准备

ADSP-21569EVB开发板

产品链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.17.1242422aTeDI94&id=721683997705

在这里插入图片描述

AD-HP530ICE仿真器

在这里插入图片描述

进入正题

提问是一个很大的学问,特别是对新人来说,把自己不懂的疑问表述清楚尤为重要。我们经常会收到让人无所适从的提问,比如:“OP,这个程序跑不通”,“OP,这个东西不行”,“OP,这个灯不亮,怎么办?”“OP这个程序飞啦” 巴拉巴拉巴拉…

遇到了问题,最直接的描述就是这个东西不行,但是作为研发人员,这种问题的描述方式是会让所有人都一头雾水,到底哪里不行?你在提问的时候,千万不要觉得我们技术支持人员都是先知,都能瞬间穿越到你身边去,看着你调。单纯的一句不行,臣真的是有心无力,实在是想帮忙,但浑身的劲都使不上啊。

所以对于技术提问来说,你的提问里信息越全面,讲得越清楚,我们能够提出的建议和解决办法就会越有针对性,你也越容易获得你想要的答案。

我是做嵌入式开发的,那单就这个领域,简单的说一说,无非就是硬件跟软件,我列一个最基础的,大家可以参考一下:

提问:

  1. 先说硬件,我是用的ADI的21xxx处理器,我用的TI的CXXX,我用的STM32的哪个哪个型号,目前正在调试的板子是xxx公司的XXX开发板,型号是:xxxx,板子版本号是xxx,或者是我自己做的硬件,贴个图,简单说一下。首先将这个的目的,是让我们知道你的硬件是什么样的,如果是IC原厂的EZKIT,或者是OP社区,又或者是其他公司的我们所了解的硬件,我们就清楚了你的硬件平台。或者是自己做的板,或者是我们不了解的硬件板,这个描述就要这些信息全部涵盖进去了,让我们知道应该从哪个方面去寻找你即将要的答案。

  2. 再说开发环境,单就ADI来讲,有人用VDSP,有人用uclinux,还有人用CCES,VDSP又有人用3.5版,有人用4.0版,有人用5.0版,5.0版里又有人用update7,有人用update10。每一个版本都有差别,有些无足轻重,而有些确实引起程序出错的根源,所以必须要告诉我们,你现在用的开发环境的准确信息,至少让我们在做技术支持的时候也能在和你同样的开发环境下来验证或则复现。或则以我们的经验会告诉你版本差异可能存在的问题。

  3. 最后说问题,问题有很多种,可能是硬件的,可能是软件的,对于提问者来说,一定要尽可能的把出现的问题描述清楚,出现的错误能抓图的抓图,能复现的详细描述复现流程。

  4. 自我分析,对于一个调试者来说,自我Debug的能力非常重要,板子是你的,程序是你的,应该你自己最有发言权,所以出现问题后,你做过了哪些尝试?尝试的结果?猜测可能存在的问题?这些是你自身所积累的技术财富,也能让帮助你的人更快的找到问题所在,这一点至关重要,把他都对给你帮助的人讲出来!!!

基本上就是这些,有问题能够详细的写出来,以这种写的方式提出来是最好的。也许你在调试的时候怎么也弄不明白,而把问题写出来,在写的过程中,自己就找到问题所在了。

我举个实例,这是我以前的客户提的问题:

[求助]BF518外部flash不能烧写(以下是我和客户邮件沟通的内容)

我是ADSP新手,自己参考ADI的BF518开发板做了个板子,用的518F芯片,SDRAM:MT48LC32M16A2P,flash用的是29LV320TE-90PFTN,共计4MB的容量,但我只用了AMS0-2来连FLASH,就是用了3MB的空间,AMS3做外部器件的扩展了。硬件调试显示flash是正常的,我对它也可以做整个芯片的擦除、读写,读写的数据也对。我先用的是ADI的原厂仿真器ICE-1000,怀疑是仿真器问题的时候更换了另一个AD-HP530ICE,现象一模一样也是不能烧写,可以判断并不是仿真器工具的问题。

参考了OP你的帖子和发布的视频教程,我先设置生成LDR文件,在OPTION里也选了flash,bin格式,16位,我准备烧的程序没有用到SDRAM,只是对GPIO进行操作,所以没有加载init_code。然后生成了ldr的文件。

由于flash只使用AMS0-2,所以我修改了BF518例程里面的flash driver程序,将sector改为48,也修改了器件的code,用VDSP的烧写程序时,导入flash drive后可以正确读取器件CODE,并且sector map也对。然后在programming选项卡里选erase all,格式bin,点program后,flash进行擦除,然后烧写进度条有反应,但是很快就断了,显示error: could not write file,load wil lnot complete。如图

在这里插入图片描述

在这里插入图片描述

我自己分析可能原因:

  1. 仿真器问题,换了一个新的仿真器试了也不能烧。首先排除。

  2. flash自己的问题,但是我用仿真器对flash进行读写的时候没有问题,数据也对。我对整个芯片进行了擦拭,然后交替写入0x5555,0xaaaa,再把数据读回来,也显示正确。从VDSP的memory里看也是对的。

  3. driver的问题,修改后的driver导入显示成功。如图。

4.设计问题,flash用的AMS0-2的空间,ADI自己的板子上是4个bank全用了,而且用的flash的是bottom boot的。我用的flash是top boot型的,只用了三个bank,是不是因为boot的block地址在AMS3空间,而不能烧写?

  1. SDRAM的初始化代码,你的帖子和视频教程里说需要对init code,但是我烧写的程序没有用到SDRAM啊,是不是不需要烧写,另外烧写的话,有没有代码可以借鉴一下啊,我对init code不太了解,你说在518的文件夹下有源码,我看了不知道怎么使用,请高手指教。

补充:我用的软件是vdsp++5,update9,高手们指点一下吧,为什么flash烧不了呢?

OP的答复

问题描述的非常清楚,我个人的建议:

  1. 确认一下你使用AMS0到AMS2 三个线使用门电路 译码地址的关系是否正确。

  2. 检查焊接,看是否有短接或虚焊地方。

  3. 建议使用尾缀BD的芯片,TE的没有用过,不知道会产生什么结果。

这位兄弟继续提问

这两天我又折腾了一下,通过驱动可以把数据写入flash了,貌似是驱动的问题。不过写进去之后却遇到了系统不能自举的问题:flash显示烧写完成后,断开仿真器,断电,重新上电,但是板子没有反应,烧的GPIO口输出方波的程序没有工作。

硬件连接上,我检查了bmode管脚,确实为001,从外部8或者16位的异步器件启动。我在程序里读SYSCR寄存器,也显示0x8001,外部启动设置应该没有问题。

我查看了生成的ldr文件,16bit,bin格式,无初始化代码。写入到flash的文件后,从memroy里看0x20000000地址里数据。第一个16字节的数据头的前4个字节,居然是重复的。即06 50 6B AD 00 00 A0 FF 00 00 00 00 C0 0F 00 00的ldr数据变成了06 50 6B AD 06 50 6B AD 00 00 A0 FF 00 00 00 00 C0 0F 00 00不知道为什么写入flash后会出现这样的情况。我用手里533的板子试了,虽然写的驱动和代码不一样,不过也会出现前4个字节重复的现象,不过533的那个板子可以自举,我的这个518的就起不来。

于是我又查看了断电后boot的情况,用仿真器看上电后的数据,533的板子里确实是在FFA00000的地址里导入了LDR的数据,所以能自举,但我的板子断电后上电,FFA00000地址里的数据就不对,没有往DSP里搬运数据。请教如何才能诊断程序是否boot呢?

OP继续答复

可以用示波器在上电瞬间测量数据线和读使能线是否有信号,如果有,说明处理器上电后在读取flash数据。

你可以先写一个点LED的代码看看,不要使用SDRAM。代码越简单越好。看是否能启动。

另外VDSP下有个bootroom的代码,运行可以模拟从flash加载代码运行,你可以跟一下看看。

在仿真中,除了连接后复位的模式,还有终止模式和不干涉模式,即连接仿真器后不会对处理器复位,保持处理器当前运行状态,在config里面可以配置,你可以使用这两种模式看看。

这位大兄弟问题还没有解决,继续提问

多谢你的指导!前两天回家了,才回来。

我测了一下上电后的信号,AMS0和ARE的信号只在上电后有4次信号,然后就没了。不知道是为什么。用boot rom代码看,我从main那里设了断点,然后进去,单步走,先是读SYSCR,然后跳到_bootrom.main.testquick,然后跳到testall,仍然会进main。init,然后到_bootrom.sysreset.loop那里仿真器就断了。因为是新手,也很头大,搞不懂正常的启动流程应该是什么样的,怎么会再复位那里跳出来呢。板子上用的是官方开发板上得复位芯片。这个用bootrom看代码应该怎么看呢?

我用不干涉模式看,上电后,连仿真器,连上后就看到有程序在运行,我halt后,FFA10000里的数据也不是flash里的ldr数据。不知道程序在跑什么。

另外,adsp的177管脚必须焊接么?我的板子上没焊,不知道是否有关联。

请指教!多谢!!

OP的答复

177管脚最好焊接,你可以测量一下177的地是否和其他地连接在一起,如果连接了,不焊接应该可以。

你用点灯的LED代码LED代码是否能boot?另外flash你最好换成尾椎为DB的,不要用TE的,这个我不知道是不是会影响boot。如AM29LV320DB。

大兄弟继续

多谢andy耐心的帮助!

我更换了flash,换成M29W320EB,flash driver修改后,可以烧入程序,系统可以启动,GPIO可以工作,输出波形。

可是又遇到了新问题,就是启动几次后就起不来了。我查看FLASH,里面的数据全是一样的数据,如bb84bb84.。。。,这时候如果再去烧写程序,flash driver读回来的器件code就是错误的,我用自己写的flash 测试程序走一遍,设置完EBIU后,读code,这时就对了,而且这时候flash里面的数据也刷新成了程序数据。系统就能启动了。但是几次之后又是一样的问题再次发生。

我怀疑启动过程中ebiu的初始化有问题,有时候没有完成flash的初始化,所以启动不起来。可是这个怎么设置啊?是不是初始化代码的问题?

OP的答复

查查你的焊接是否地址线短接了,你可以遍历SDRAM验证地址线。方法:

写一个遍历写入SDRAM数据的代码。交替写入0x5555,0xaaaa.

然后再写一个校验的代码,将写入的值读出做比较,打印出所有的错误代码。

运行代码,先将SDRAM写满数据。然后打开memory,随机找个地址,将其值改为其他的,然后运行校验代码。看校验的错误有几个,如果是1个代表地址没问题,如果打印多个,说明地址线短接。

大兄弟最终解决问题

个问题已经解决了,启动几次就起不来是因为AMS3没有接上拉电阻,虽然我的FLASH没有用到AMS3,但是它确实影响了启动。上拉后就可以正常启动了。

自己的板子SDRAM走线可能不太好,SDRAM跑到40MHz,遍历读写校对没问题。但是频率一高就不行了。想问下andy是不是和走线长短以及我没有在信号线上串小电阻有关?

OP的最终答复

通常SDRAM对走线要求不高,但走线确实会有影响,走线要求大致是:尽量等长,但不必特意去绕线,毕竟不是DDR。 线不要走太细,建议6mil及以上线宽。 时钟线远离干扰源,有条件的话线两边包地。

另外,建议加上串联的匹配电阻。

AMS3应该不用加上拉,这个和启动没有关系,不知你的为何如此,这个有待进一步讨论。当然最终问题解决就好!

第二章程序说明: (1)2-1.asm对应第二章主程序代码; (2)2-2.asm对应第二章主程序中断向量代码; (3)2-3.cmd对应第二章主程序配置文件代码; (4)2-4.asm对应第二章写Flash程序代码; (5)2-5.cmd对应第二章写Flash配置文件代码; (6)2-6.asm对应第二章写Flash中断向量代码; (7)2-7.cmd对应第二章写Flash工具代码; (8)2-8.asm对应第二章DSP读USB接口代码; (9)6711.h为以上程序需要的头文件,书中没有原代码。 第三章程序说明: (1)3-1.asm对应第三章AD测试程序代码; (2)3-2.asm对应第三章AD测试程序中断向量代码; (3)3-3.cmd对应第三章AD测试程序配置文件代码; (4)3-4.asm对应第三章DA测试程序代码; (5)3-5.cmd对应第三章DA测试程序配置文件代码; (6)3-6.asm对应第三章写Flash程序代码; (7)3-7.cmd对应第三章写Flash配置文件代码; (8)3-8.asm对应第三章写FLAS中断向量代码; (9)3-9.asm对应第三章AD/DA联合调试程序代码; (10)3-10.asm对应第三章数据滤波程序代码; (11)vectors.asm为以上程序需要的文件,书中没有原代码。 第五章程序说明: (1)5-1.asm对应第五章语音信号的采集和播放主程序; (2)5-2.asm对应第五章语音信号的采集和播放中断向量程序; (3)5-3.cmd对应第五章语音信号的采集和播放配置文件; (4)5-4.asm对应第五章语音信号的u/A律压缩程序; (5)5-5.m对应第五章语音去噪的仿真程序; (6)5-6.asm对应第五章语音去噪的主程序; (7)5-7.c对应第五章CVSD编码的C语言程序代码; (8)5-8.asm对应第五章CVSD的解码程序; (9)5-9.asm对应第五章CVSD的编码程序。 第六章程序说明: (1)6-1.asm对应第六章DSP软件代码; (2)6-2.c对应第六章主机软件代码; (3)6-3.c对应第六章回音相消主程序代码; (4)6-4.c对应第六章回音相消汇编程序代码; (5)echo.h对应第六章回音相消头文件代码; (6)echocfg.h对应第六章回音相消头文件代码; (7)6-5.cmd对应第六章回音相消配置文件。 第七章程序说明: (1)7-1.c对应第七章图像控制器程序代码; (2)7-2.c对应第七章LCD控制程序代码; (3)7-3.c对应第七章AC97驱动程序代码; (4)7-4.c对应第七章背景灯初始化驱动程序代码。 第九章程序说明: (1)9-1.c对应第九章Viterbi译码c程序; (2)9-2.asm对应第九章Viterbi译码汇编程序。 第十章程序说明: (1)10-1.m对应第十章仿真程序; (2)tnonunif.m对应第十章仿真程序的函数; (3)10-2.m对应第十章系统DSP主程序; (4)10-3.m对应第十章非均匀采样傅立叶变换子程序; (5)10-4.m对应第十章USB通信子程序; (6)10-5.m对应第十章中断向量程序; (7)10-6.cmd对应第十章配置文件; (8)10-7.cmd对应第十章CPLD程序;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ADI_OP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值