28335复位电路请教,偶尔会上电不工作。
本帖最后由 金色大元宝 于 2015-4-6 15:53 编辑编辑原因,增加官方原理图,以供对照
28335上电复位电路请教,根据官方的原理图改编而来,但发现会随机出现上电不工作的情况,用的是30M有源晶振。
不工作的时候,示波器测试晶振输入脚30M没问题。CLKOUT脚,工作的时候正常输出37.5M,不工作的时候输出是3.75M,
不工作的情况是随机的,没有明显规律。
使用的复位是TPS767D301复位。
附部分原理图。
我以前遇到过同样现象,28335上电不工作,后来我将30MHZ的有源晶振换成16MHZ的有源晶振就好了,直到现在没想明白咋回事 596142041 发表于 2015-4-6 16:12
我以前遇到过同样现象,28335上电不工作,后来我将30MHZ的有源晶振换成16MHZ的有源晶振就好了,直到现在没 ...
不是每次不工作,10次上电,可能会有1次不工作。和开关机长短,开关机频率都没有明显关系。随机出现。 最新发现, 上电不工作的时候,CLKOUT也是37.5M,那表示芯片复位成功,FLASH程序未执行吗? 我用BGA的lpc4357也出现过这种情况,100次有一次复位不成功,后来换了芯片 你的那个复位的电容估计是小了,一般得1uf以上吧,记得有个文档上要求是10uf,我现在都是用的10uf,没有遇到问题。
电容太小了,复位的低电平宽度不够,内核可能反应不过来。 zhandouji 发表于 2015-4-6 20:36
电容太小了,复位的低电平宽度不够,内核可能反应不过来。
您说的是c36吗?我记得复位电容是用在rc复位和手工复位的,这里的c36是参考官方原理图,个人认为是过滤尖峰脉冲的,不知道是不是我理解错误,
还有一点,我在dsp的去藕电容里,3.3和1.9各加了一个22uf的钽电容,增加电源稳定性,不知道对复位有没有影响
明天把钽电容拆了,c36加大试试 28335的复位管脚上要有个大一点的电容,如果你的电路上只有这个C36,那可能就是问题所在了。 本帖最后由 金色大元宝 于 2015-4-7 05:43 编辑
zhandouji 发表于 2015-4-6 22:06
28335的复位管脚上要有个大一点的电容,如果你的电路上只有这个C36,那可能就是问题所在了。 ...
只有这一个呢,今天改成大电容试试 一上班就测试了。C36加大为10uF,不工作状态频率反而加大了。拆掉钽电容,区别不大。
怀疑是FLASH执行问题,在main函数第一行,插入强制延时1秒程序。 有改观,原先大概10几次会死机一次。现在30几次才会偶尔来一次。
而且上电不工作的时候,延时程序还是执行的。 应该和硬件电路没多大关系了。刚刚怀疑软件问题,把所有代码都精简。只开一个CpuTimer0中断,用来闪烁运行灯。开关机100次。没发现不工作的情况。
那要慢慢查了。把代码和中断挨个开起来,看看哪部分会引起这个问题。 金色大元宝 发表于 2015-4-7 08:55
一上班就测试了。C36加大为10uF,不工作状态频率反而加大了。拆掉钽电容,区别不大。
怀疑是FLASH执行问题 ...
我之前也遇到过上电不工作的情况,10个板子里有3个板子是上电有时会遇到不工作,但是另外几个一直都是正常的,啥换电容啊,换复位芯片啊,都试过都不能解决,
我也怀疑过软件的问题,但是想不到软件上哪里会导致上电不正常工作,而且其他几个板子都是一直正常的啊
金色大元宝 发表于 2015-4-7 08:55
一上班就测试了。C36加大为10uF,不工作状态频率反而加大了。拆掉钽电容,区别不大。
怀疑是FLASH执行问题 ...
既然延时程序都执行了那么程序上电就跑起来了,看不到程序工作的现象,说明程序跑死了 xiaowenshao 发表于 2015-4-7 09:36
既然延时程序都执行了那么程序上电就跑起来了,看不到程序工作的现象,说明程序跑死了 ...
是的。正在挨个查,XINTF,SCI, EPWM,挨个启用。看看是哪里的问题。 金色大元宝 发表于 2015-4-7 09:40
是的。正在挨个查,XINTF,SCI, EPWM,挨个启用。看看是哪里的问题。
坐等你成功 xiaowenshao 发表于 2015-4-7 09:45
坐等你成功
问题找到了,程序跑死的问题,,出现在XINTF, 上电后会有XINTF外部SRAM的自检工作,会卡死在那里,麻烦帮我分析下,怎么提高XINTF的存取成功率?
void RAM_Test(void)
{
volatile Uint16 *RAM_Addr;
volatile Uint16 j;
volatile Uint32 i;
RAM_Addr=(volatile Uint16 *)0x100000; //SRAM起始地址
for(i = 0; i < 0x4000; i++){ //检测32K
*(RAM_Addr + i) = 0x5555; //
for(j=0;j<10;j++){asm(" NOP");} //延时
//此处有加调试LED灯,上电卡死的时候不会执行到此处,应该是赋值的时候就卡死了。
}
for(i = 0; i < 0x1000; i++){ //检测32K
if(*(RAM_Addr + i) != 0x5555){ //检测不同,则自检不通过
b_MacCheckResult = 1;break;
}
for(j=0;j<10;j++){asm(" NOP");} //延时
}
}
附SRAM原理图,难道是电容不够大?
SRAM存取速率应该没问题的,测试的时候增加调快过ACTIVE等参数。计算过耗时时钟,都可以正确存取。
// Zone 6------------------------------------
// When using ready, ACTIVE must be 1 or greater
// Lead must always be 1 or greater
// Zone write timing
XintfRegs.XTIMING6.bit.XWRLEAD = 3; //默认 3, //2//选择后面这个数值,SRAM存储速度加快一倍。
XintfRegs.XTIMING6.bit.XWRACTIVE = 7; //默认 7, //4
XintfRegs.XTIMING6.bit.XWRTRAIL = 3; //默认 3, //2
// Zone read timing
XintfRegs.XTIMING6.bit.XRDLEAD = 3; //默认 3, //2
XintfRegs.XTIMING6.bit.XRDACTIVE = 7; //默认 7, //4
XintfRegs.XTIMING6.bit.XRDTRAIL = 3; //默认 3, //2
// double all Zone read/write lead/active/trail timing
XintfRegs.XTIMING6.bit.X2TIMING = 1; //默认 1, //0
// Zone will sample XREADY signal
XintfRegs.XTIMING6.bit.USEREADY = 0; //默认 1, //0 因为XREADY未连接,所以设置为0
XintfRegs.XTIMING6.bit.READYMODE = 1; // sample asynchronous
// Size must be either:
// 0,1 = x32 or
// 1,1 = x16 other values are reserved
XintfRegs.XTIMING6.bit.XSIZE = 3;
现在使用的是默认参数,大侠们帮我分析下。问题会出在软件上还是硬件上? 顶上去,求助 找到原因了
好贴,长见识了
页:
[1]