modbus 发表于 2018-9-11 11:55:57

感觉STC8A的上电复位不是很可靠

用的是STC8A4K64S2,有低概率上电不能复位,死机,有的芯片不能复位时有些管脚的电压为1伏多、2伏多,上电死机时即使把电压从5伏降到1伏再升到5伏也不能复位,说明内置的低压检测复位也没起作用(下载配置的是起作用),估计是STC内置的引导配置程序都没执行,这半年来会不定时的出现,有些是在出厂测试时都会出现,而同板上有一个16脚的STC15W从来都没出现不能上电复位(STC15W我用了这么多年还没有碰到一例不能上电复位)。

makesoft 发表于 2018-9-11 12:51:24

这个芯片还不成熟,和你一样的感觉。

haibaogk 发表于 2018-9-11 13:13:26

我用的stc8f2kxxx,在stm32,stm8等用的好好的crc16校验函数在这边就出问题,部分几率出现结果+1的情况,判断不对再减一一次判断是否对,应该是逻辑移位过程中产生的问题。

makesoft 发表于 2018-9-11 14:00:10

haibaogk 发表于 2018-9-11 13:13
我用的stc8f2kxxx,在stm32,stm8等用的好好的crc16校验函数在这边就出问题,部分几率出现结果+1的情况,判 ...

你这个要是确认的话,问题大了,说明内核有bug,不过我还没遇到这样的问题,都是外围的bug。

yaonen 发表于 2018-9-11 14:17:57

我还没遇到这样的问题

eaglelpx 发表于 2018-9-11 14:29:54

双向IO检测外部无源开关信号,各种乱,时不时触发一次。加延时,检测几次还是一样

fct8591 发表于 2018-9-11 14:32:46

不至于吧拿了几片还没开始布板

X-h-p 发表于 2018-9-11 15:10:07

用了几百片还没有发现问题,没用外部晶振

modbus 发表于 2018-9-11 16:54:47

我这个用的是外部有源晶振(晶振这个不用怀疑,用的是知名品牌),AD基准电压是2.5伏(TL431),现在客户退回来一个,反复通断电几十到上百次就会出现一次上电不能复位,但每次通断必须要间隔比较长的时间,如果间隔很短(比如几十秒以内),则不会出现上电不能复位

modbus 发表于 2018-9-11 17:00:00

感觉STC8可能对供电电源要求比较苛刻

su33691 发表于 2018-9-11 19:20:02

怀疑楼主的电源有问题。
我原来用台可调电源,刚开机时,5V输出有一个10V的尖峰。

makesoft 发表于 2018-9-11 19:48:11

晶振电路很薄弱,起子碰触晶振引脚也许就停振死机,没有再入机会。

modbus 发表于 2018-9-11 20:55:51

su33691 发表于 2018-9-11 19:20
怀疑楼主的电源有问题。
我原来用台可调电源,刚开机时,5V输出有一个10V的尖峰。 ...

电源用的是XL2576,板子上还有一片STC15W,每次都能正常,并且这是一个快20年的老产品,换过四五种CPU,一直都没出现过主CPU上电不启动的现象,同时用其他CPU的产品现在还一直再出货,量可比用STC8这种大多了(STC8只是小批量尝试),从来没有出现过上电死机,所有的外围元件也都是相同的

modbus 发表于 2018-9-11 21:06:07

makesoft 发表于 2018-9-11 19:48
晶振电路很薄弱,起子碰触晶振引脚也许就停振死机,没有再入机会。

用的是外部有源晶振,并且上电后第1件事就是把两个不同端口的两个管脚清0(程序中也没有对这两个管脚置1的指令),然后延时0.5秒后切换到外部晶振,而上电死机后这两个管脚都是高电平,并且低压检测复位功能无效

modbus 发表于 2018-9-11 21:13:56

有些芯片上电死机时有些管脚会出现1、2伏的电压(没接负载),感觉正常时我想让他输出2伏的电压也输出不了啊

小李非刀 发表于 2018-9-11 21:42:38

上电、断电,示波器检测电源是否有冲击。常发现有用户的电源有这个问题。
见到STC官方是用数控电源缓慢的从1V升到5V再降到1V,1V/秒的速度升降电压,测试MCU的复位情况(电源缓慢升降对复位影响很大),给的结果是1000次不会出现复位失败。MCU工作后会输出一个方波,测试设备会检测这个方波。

lsls666888 发表于 2018-9-12 08:49:34

还是用STC15系列吧,感觉这个稳定多了

modbus 发表于 2018-9-12 09:15:30

小李非刀 发表于 2018-9-11 21:42
上电、断电,示波器检测电源是否有冲击。常发现有用户的电源有这个问题。
见到STC官方是用数控电源缓慢的从 ...

电源用的是2576的经典电路,我们不下10种产品都用这个,其他的从没出现过问题,除了这个STC8。
你这种实验方法实验100万次也不会有问题。

norman33 发表于 2018-9-12 09:17:11

关注下,要是真有问题还得官方来修复

modbus 发表于 2018-9-12 09:26:52

经过对这些出现过上电死机时的芯片管脚电压记录的对比,发现上电死机时都是会在某些AD输入管脚上输出0.8~3伏之间的电压,而实际上这些管脚并没有用作AD输入,有些管脚甚至还是悬空没用的,其他非AD输入管脚上的电压都是5伏。

su33691 发表于 2018-9-12 10:02:42

外接一个复位IC试试。

modbus 发表于 2018-9-12 11:31:13

su33691 发表于 2018-9-12 10:02
外接一个复位IC试试。

STC这种设计思路一旦内置的上电复位不可靠,外接复位IC也没用,因为复位管脚要靠运行内置的STC引导程序才有效,否则只是一个IO,而上电不复位STC引导程序也运行不了,可以说STC这种设计思路连最后的一点拯救希望也给设计没了

modbus 发表于 2018-9-12 11:38:17

经过反复做实验,感觉应该是冷启动时(断电时间要长一些)个别STC8A芯片对电源噪音非常敏感,导致内部AD转换器部分出问题而引起上电死机

modbus 发表于 2018-9-12 11:44:02

板上有一个485接口,如果连上电脑(没有运行通讯程序),那么上电死机的概率就大,如果不连电脑,上电死机的概率就小很多,同板上的STC15W则永远都不会上电死机,同一块板把STC8换成其他厂家的CPU(我们做成了核心板)则也永远都不会上电死机

mengtiantang 发表于 2018-9-12 11:46:09

stc的一直不用

modbus 发表于 2018-9-12 11:50:33

死机时基准输入管脚的电流非常大,串一个330欧的电阻到5伏(原并有TL431,为了做实验把431拆了),基准管脚输入能把电压拉低到2.7伏,等于基准管脚输入流入了6mA多的电流,而上电正常时这个管脚的电流非常小

makesoft 发表于 2018-9-12 11:52:02

本帖最后由 makesoft 于 2018-9-12 11:55 编辑

STC芯片出的太快了,估计就老妖一个人做,缺陷难免,我也遇到定时器的BUG,差点被害死。

https://www.amobbs.com/thread-5698604-1-1.html

youngfly 发表于 2018-9-12 12:11:47

我在使用STC8A的时候也发觉这个片子相比15系列在抗干扰方面要弱一些,PCB布线需要特别注意电源回路的设计,否则容易引入干扰

小李非刀 发表于 2018-9-12 22:51:28

makesoft 发表于 2018-9-12 11:52
STC芯片出的太快了,估计就老妖一个人做,缺陷难免,我也遇到定时器的BUG,差点被害死。

https://www.amob ...

你这个属于中断响应的问题。

小李非刀 发表于 2018-9-12 22:55:17

modbus 发表于 2018-9-12 09:15
电源用的是2576的经典电路,我们不下10种产品都用这个,其他的从没出现过问题,除了这个STC8。
你这种实 ...

那我怀疑你的电源做得不好。见过有人用TI的电源芯片,24V输入,上电都能过冲到12V十几个ms才落回5V,设计不当不奇怪的。

makesoft 发表于 2018-9-12 23:11:15

小李非刀 发表于 2018-9-12 22:51
你这个属于中断响应的问题。

本身低等级中断是可以等待高等级中断结束的,版主这意思STC不至于这样也有问题吧,不然中断还要分优先级干什么啊?

modbus 发表于 2018-9-13 09:55:31

小李非刀 发表于 2018-9-12 22:55
那我怀疑你的电源做得不好。见过有人用TI的电源芯片,24V输入,上电都能过冲到12V十几个ms才落回5V,设计 ...

那就是说STC8A对电源的抗干扰能力非常差,对电源要求非常苛刻了,同一块板子我换了3家不同的CPU和STC自家的STC15W都能正常启动,就STC8A不能,我也相信如果用7805做电源肯定能行,但这是办公室环境还这样,如果在工业现场,旁边都是变频器、接触器、电磁阀,可能STC8上电启动时旁边的变频器正在加减速、接触器电磁阀正在啪啪啪动作,即使用7805就能每次都能上电启动吗,到时是不是又怪用户的电源没有隔离啦

modbus 发表于 2018-9-13 10:03:08

通过反复实验,就是STC8A的AD转换部分在冷启动期间对电源的噪音非常敏感,很容易导致AD部分故障死锁而使上电不能启动,此时AD输入管脚会输出1~2伏的电压,基准输入管脚的输入阻抗会变的非常小,电源电压必须要降到0.2伏以上才能解除死锁而在下次上电能正常启动,降到0.3伏再上电都不行。

modbus 发表于 2018-9-13 10:11:25

实际情况就是如果不通过485口连接电脑,基本上每次都能正常启动,而通过485口连接电脑后几次就有一次启动不了,连接电脑后会在STC8的电源上寄生出0.1~0.3伏的寄生电压,估计个别STC8A芯片的AD转换部分在上电时对这个寄生电压非常敏感(因为再换个STC8A芯片就没有问题)

modbus 发表于 2018-9-13 10:18:59

小李非刀 发表于 2018-9-12 22:55
那我怀疑你的电源做得不好。见过有人用TI的电源芯片,24V输入,上电都能过冲到12V十几个ms才落回5V,设计 ...

另外再重复一遍,我这个电源上电根本就没有过冲,就是一个2576经典电路,所有元件都是在立创买的,还有什么设计当不当的,不要再拿电源和过冲说事。

makesoft 发表于 2018-9-13 11:29:20

modbus 发表于 2018-9-13 10:18
另外再重复一遍,我这个电源上电根本就没有过冲,就是一个2576经典电路,所有元件都是在立创买的,还有什 ...

呵呵,要体谅版主的难处,好像坛子里面就我们俩麻烦,事多{:smile:}

su33691 发表于 2018-9-13 12:00:40

很好的经验啊。这样才能督促STC进步。

weavr 发表于 2018-9-13 12:45:58

这种情况可能是断电不彻底,楼主可以试一下在VCC和GND并一个470欧电阻或者在下载软件里调高复位电压试一下。

modbus 发表于 2018-9-13 15:21:45

weavr 发表于 2018-9-13 12:45
这种情况可能是断电不彻底,楼主可以试一下在VCC和GND并一个470欧电阻或者在下载软件里调高复位电压试一下 ...

没用的,是AD部分死锁了,必须要掉电到0.2伏才能解锁,我的复位电压设的是3伏,最高档,复位管脚和复位电压都是STC引导程序能运行才有效,引导程序运行不了就无效

modbus 发表于 2018-9-13 15:34:19

说说实验结果吧,有个别STC8A芯片(大约1~2%的比例),如果断电情况下电源上有0.3伏左右的寄生电压,此时正常上电(不能用调压方式缓慢上电,那样没问题)会出现上电死机现象,主要表现为AD基准输入管脚输入阻抗很小,AD管脚会输出1~2伏左右的电压,而其他数字管脚都正常,输出电压都是5伏的准双向口。

modbus 发表于 2018-9-13 15:43:20

我用485接口连电脑,在STC8的电源上会寄生出0.2~0.3伏的电压(用了西门子的PLC试了试,照样也会有寄生电压,所以这个寄生电压只要有通讯就很难避免,除非隔离),此时个别STC8芯片就很容易出现上电死机,然后把通讯线去掉,供电电源断电,用另外一个电源串一个大电阻加到STC8的电源上,把STC8电源上的电压调到0.3伏保持住,然后正常上电,照样也会出现上电死机,如果调到0.2伏则不会出现上电死机

su33691 发表于 2018-9-13 15:49:34

其实STC8A有8路的ADC就够用了。接P0口。
P1口接UART2,PCA模块,功能已经不少了。

关键是要稳定,稳定可靠压倒一切。

su33691 发表于 2018-9-13 16:08:30

我的一个项目上采用STC8A,也用485通信接口,仅仅用来设置参数。
看楼主描述的情况,我就放心了。{:lol:}

modbus 发表于 2018-9-13 16:18:00

su33691 发表于 2018-9-13 15:49
其实STC8A有8路的ADC就够用了。接P0口。
P1口接UART2,PCA模块,功能已经不少了。



是呀,不稳定再便宜也不敢用,还有STC在自己的低压技术和经验不是十分牛的情况下,不要过度的要把芯片的最低工作电压低的多少多少,我感觉这个问题就是因为要把STC8的最低工作电压压到很低,但同时设计能力和生产能力又不能保证芯片的一致性很好,而导致了部分芯片对寄生电压特别敏感

modbus 发表于 2018-9-13 16:21:56

su33691 发表于 2018-9-13 16:08
我的一个项目上采用STC8A,也用485通信接口,仅仅用来设置参数。
看楼主描述的情况,我就放心了。 ...

我这个还要用485口控制变频器,我是彻底死心了

su33691 发表于 2018-9-13 16:33:11

楼主做事很认真,赞!
谢谢楼主的经验。

modbus 发表于 2018-9-14 11:55:07

新结果,寄生电压超过了0.5伏每次也都能启动起来,就是在0.2伏~0.5伏之间不行,并且不是每个芯片都是这样,大多数芯片都没问题,有问题的芯片也不是每次都启动不起来,也是低概率启动不起来,所以也不要指望出厂测试能筛选出来,除非每一个产品都要花几个小时以上的测试时间,感觉应该是制造工艺的问题了

zmh169 发表于 2018-9-14 16:27:58

eaglelpx 发表于 2018-9-11 14:29
双向IO检测外部无源开关信号,各种乱,时不时触发一次。加延时,检测几次还是一样 ...

没加个外不上拉试试?

eaglelpx 发表于 2018-9-14 16:33:45

zmh169 发表于 2018-9-14 16:27
没加个外不上拉试试?

没加,串了个二极管T4到外部无源开关

小李非刀 发表于 2018-9-15 23:05:47

haibaogk 发表于 2018-9-11 13:13
我用的stc8f2kxxx,在stm32,stm8等用的好好的crc16校验函数在这边就出问题,部分几率出现结果+1的情况,判 ...

我用STC8A8K32S4A12、STC8A4K32S2A12、STC8F2K32S2,跑MODBUS-RTU协议,CRC16没发现问题。

su33691 发表于 2018-9-16 11:38:03

小李非刀 发表于 2018-9-15 23:05
我用STC8A8K32S4A12、STC8A4K32S2A12、STC8F2K32S2,跑MODBUS-RTU协议,CRC16没发现问题。 ...

楼主能否把你跑的MODBUS-RTU协议,CRC16的代码放出来,先谢谢了。

haibaogk 发表于 2018-9-17 09:37:44

unsigned int CRC_16(unsigned char *Buf , unsigned char len)
{
        unsigned int CRC_Num = 0xFFFF;
    unsigned char   i;
   
    while(len--)
    {
      CRC_Num^=*Buf++;   
      for (i = 8; i > 0 ; i--)
      {
            if (CRC_Num & 0x0001)
            {
                CRC_Num = (CRC_Num >> 1) ^ 0xA001;
            }
            else
            {
                CRC_Num = CRC_Num >> 1;
            }
      }
    }
    return (CRC_Num);                               
}

我的代码,在stm8s003,stm32f070等多个设备上运行没出过问题,用mbpoll测试过错误率远小于千分之一
用在STC8F2K08S2上出问题,在发送的时候人为加个判断就可以,校验码减一既可以,但问题始终存在
if(CRC_16 ( SendBuf , SendLen )!=0)
                        SendBuf = SendBuf - 1;

怀疑过是keil编译器问题,换了老版本的同样存在,因为问题暂时解决,mbpoll测试通过,两三个小时出错不超过2次,就没继续深究下去了

小李非刀 发表于 2018-9-17 16:42:38

su33691 发表于 2018-9-16 11:38
楼主能否把你跑的MODBUS-RTU协议,CRC16的代码放出来,先谢谢了。

以为方式的算法:
unsigned int MODBUS_CRC16(unsigned char *p,unsigned char n)
{
        unsigned char i;
        unsigned int crc16 = 0xffff;
        do{
                crc16 ^= (unsigned int)*p;
                for(i=0; i<8; i++){
                        if(crc16&1){
                                crc16 = (crc16 >> 1)^0xA001;
                        }else{
                                crc16 >>= 1;
                        }
                }
                p++;
        }while(--n != 0);
        return (crc16);
}

linghu886 发表于 2018-9-18 18:28:46

不至于   刚刚一个新项目用了STC8A4K   系列      100+套   没有明显复位方面的问题。

小李非刀 发表于 2018-9-21 12:23:46

不知道楼主是否使用了外部晶振,如果使用外部晶振,则P1.0~P1.7、P0.0~P0.6不能有上拉到比AVCC更高的电压上,否则晶振会不起振,MCU缺乏时钟而不能运行,造成死机、不能复位的假象。

小李非刀 发表于 2018-9-21 12:26:32

我无法联系楼主,想问下具体情况,看我是否能用相同的条件重现这个问题,或者寄板子给STC公司帮忙测试。
我测试了好久,都没发现复位不了的情况,让供电电压缓慢的在1.0V~5.0V之间升降,均能复位,测试了5万次。

su33691 发表于 2018-9-21 12:37:14

给版主点个赞。
同样关注这个问题。看楼主的贴子,是用了外部晶振,431到VREF.

modbus 发表于 2018-9-21 13:18:46

小李非刀 发表于 2018-9-21 12:23
不知道楼主是否使用了外部晶振,如果使用外部晶振,则P1.0~P1.7、P0.0~P0.6不能有上拉到比AVCC更高的电压上 ...

用的是外部有源晶振

modbus 发表于 2018-9-21 13:36:57

小李非刀 发表于 2018-9-21 12:26
我无法联系楼主,想问下具体情况,看我是否能用相同的条件重现这个问题,或者寄板子给STC公司帮忙测试。
我 ...

断电时电源上有0.2伏~0.5伏之间的寄生电压时(有问题的芯片具体范围还不一样,但都在这个范围之内),上电时会有低概率不能启动,不在这个范围之内都没问题,管脚上的具体表现就是数字管脚都正常复位了,但AD输入管脚不能正常复位,会有1点多伏的电压输出,基准输入管脚输入阻抗会变的非常低(几百欧)。你试时可以用两个电源,一个电源串大电阻给STC8产生0.35伏的寄生电压,另一个电源正常供电,或者STC8接485芯片(要外接上拉和下拉电阻)连接电脑,由电脑产生寄生电源。另外既然是做实验,肯定不能用太好的电源,否则出现概率太低很难捕作

modbus 发表于 2018-9-21 13:55:13

小李非刀 发表于 2018-9-21 12:23
不知道楼主是否使用了外部晶振,如果使用外部晶振,则P1.0~P1.7、P0.0~P0.6不能有上拉到比AVCC更高的电压上 ...

“P1.0~P1.7、P0.0~P0.6不能有上拉到比AVCC更高的电压上”这个也有点坑,那就是说测量外部模拟信号时必须要加运放跟随了,否则谁能保证STC8断电时外部测量信号也是断电的

小李非刀 发表于 2018-9-24 22:29:35

modbus 发表于 2018-9-21 13:18
用的是外部有源晶振

有源晶振不存在停振的问题。

makesoft 发表于 2018-9-26 16:55:41

本帖最后由 makesoft 于 2018-9-26 16:56 编辑

估计楼主很无语,俺那问题也至今无解!

modbus 发表于 2018-9-26 17:15:05

makesoft 发表于 2018-9-26 16:55
估计楼主很无语,俺那问题也至今无解!

估计STC公司也查不出来,那问题本身出现的概率就低,再加上是在特定的寄生电压(0.3伏左右)下。

modbus 发表于 2018-9-26 17:21:27

通过查这个问题发现了STC8和其他单片机(包括STC15)在IO口方面很不同的一个地方:在断电情况下STC8的每个IO口和VCC之间都有100K左右的电阻,而其他单片机(包括STC15)则没有,结果就是STC8在断电情况下VCC很容易引入寄生电压

su33691 发表于 2018-9-26 17:43:01

我开始转国产的M0了。STC8还不太稳定,不等了。

makesoft 发表于 2018-9-26 17:48:26

modbus 发表于 2018-9-26 17:21
通过查这个问题发现了STC8和其他单片机(包括STC15)在IO口方面很不同的一个地方:在断电情况下STC8的每个I ...

估计是特定的口线,和有些mcu设计的差不多,就是上电时序有严格要求,估计你这问题是个vcca相关的,和这个相关的可能是ref\addcin\xtal等对应vcc时序上有严格要求,说穿了还是datasheet描述的不清晰,很多东西需要显式说明的但是需要猜,还是我原来的那话,bug没有问题,但需要buglist罗列清楚。

makesoft 发表于 2018-9-26 17:50:50

su33691 发表于 2018-9-26 17:43
我开始转国产的M0了。STC8还不太稳定,不等了。

呵呵,所以回帖千万跟着打酱油和稀泥。

小李非刀 发表于 2018-9-27 23:11:30

modbus 发表于 2018-9-26 17:21
通过查这个问题发现了STC8和其他单片机(包括STC15)在IO口方面很不同的一个地方:在断电情况下STC8的每个I ...

STC的MCU,每个IO都对VCC反接一个二极管,对GND反接一个二极管,所以断电测量时,会量到一个二极管的压降,不是电阻。用二极管档测量,大约在0.6~0.75V之间。
其实现代的MCU基本都如此,IO有保护二极管。

modbus 发表于 2018-9-27 23:35:55

小李非刀 发表于 2018-9-27 23:11
STC的MCU,每个IO都对VCC反接一个二极管,对GND反接一个二极管,所以断电测量时,会量到一个二极管的压降 ...

二极管和电阻还是能区分的出,STC8管脚和VCC之间有二极管的压降和100K欧的电阻,而STC15和其他厂家的MCU只有二极管的压降而没有电阻值,不信你可以用二极管档和电阻档都分别测一下,或者在管脚和GND之间加0.3伏的电压,然后测VCC上的电压,如果只有二极管那么VCC上的电压为0,如果有电阻那么VCC上的电压为0.3伏。

yy43102328 发表于 2018-9-28 00:35:44

su33691 发表于 2018-9-11 19:20
怀疑楼主的电源有问题。
我原来用台可调电源,刚开机时,5V输出有一个10V的尖峰。 ...

我用了STC8F也是这样,上电后引脚有的不正常,具体没有找到,但是在电源稳压芯片前后都加多一个220uf电容就好了,原来是后前面加了

yy43102328 发表于 2018-9-28 00:37:47

现在还有发现不能烧录的,换了芯片就好。之前用STC15W很好的,看来便宜。。。

Dragontan 发表于 2018-9-28 08:47:34

请教楼主一个问题,我也遇到使用这颗片子手动不能复位的问题,大概是这样,使用这颗片子死机后,手动复位都没有反应,不知道啥问题,最近要用这颗片子量产10k+,看了你们的评论,这颗片子这么不稳定呀,都有点担心颗

modbus 发表于 2018-9-28 11:44:30

Dragontan 发表于 2018-9-28 08:47
请教楼主一个问题,我也遇到使用这颗片子手动不能复位的问题,大概是这样,使用这颗片子死机后,手动复位都 ...

他这个复位管脚不是硬件专用的,是靠SFR寄存器来选择的,程序跑飞时也可能把复位管脚给改成IO管脚了,这时再怎么复位都没用,只能断电了

Dragontan 发表于 2018-9-28 15:15:16

modbus 发表于 2018-9-28 11:44
他这个复位管脚不是硬件专用的,是靠SFR寄存器来选择的,程序跑飞时也可能把复位管脚给改成IO管脚了,这 ...

唉,比较扯蛋,只要死了,就只能重新断电了,我也试过直接手动复位都没有反应

tjx0512 发表于 2018-10-5 14:06:50

STC8抗干扰比15系列是弱不少,选型按使用场合看着办吧!
页: [1]
查看完整版本: 感觉STC8A的上电复位不是很可靠