zw_7627 发表于 2014-12-17 16:10:48

PIC的读内部EEPROM有一位出错,大神有碰到过吗

PIC16F630解码PT2240批量生产,这段时间遇到奇怪的现象。一把遥控器可以学习两次,查了很久,发现EEPROM写入正常,但读出来就发现其中一个字节的bit3位,老是把0读成1,但是没有把1读成0.已经排除其他软件部分对读操作的干扰。明天给供应商电话,用了这么久PIC的片子,第一次发现读EEPROM的某一位出错。去年买到假货,写一个字节都错了,假货难防啊。

markdif 发表于 2014-12-17 16:37:00

暂时没碰到过,你的程序有校验措施吗?。。。

wicy001 发表于 2014-12-17 16:40:38

这次出现,下次还能出现。

程序健壮很关键,
如果对写入要求严格,可以写入之后,立刻读一下,检验二者值是否一样,以保证正确写入。
如果对读出要求严格,可以写入时增加一个校验位, 读出的时候判断一下,通过校验的才读取。

szxszx 发表于 2014-12-17 19:42:54

没遇到过,楼主认真检查先程序

wangrwnyan123 发表于 2014-12-17 19:47:54

先要从程序上排除,如前面网友所说,写入之后马上回读一下,以验证写入是不是正确的

xianghaisha 发表于 2014-12-17 21:34:14

是每个字节的读取都会出现这个问题,还是只有一个字节位。除此之外,是不是只有一个芯片出错,如果都是个例,换个芯片就好了。但是长出问题,就是程序上需要检查了

fengyunyu 发表于 2014-12-17 22:51:36

翻新的到有可能,假货不会吧。

zw_7627 发表于 2014-12-19 11:13:39

本帖最后由 zw_7627 于 2014-12-19 11:15 编辑

markdif 发表于 2014-12-17 16:37
暂时没碰到过,你的程序有校验措施吗?。。。

有校验,写入后读出,不一致再写一遍。写入没有问题。后面的是读出后,再写入,把F7写成FF了。

zw_7627 发表于 2014-12-19 11:14:49

fengyunyu 发表于 2014-12-17 22:51
翻新的到有可能,假货不会吧。

供应商说是贝能代理的,我们这次换了家供货商。前面都是找贝能拿货,没出过这个问题。

zw_7627 发表于 2014-12-19 11:16:56

xianghaisha 发表于 2014-12-17 21:34
是每个字节的读取都会出现这个问题,还是只有一个字节位。除此之外,是不是只有一个芯片出错,如果都是个例 ...

的确是换芯片后,就解决了。

zw_7627 发表于 2014-12-19 11:17:56

wicy001 发表于 2014-12-17 16:40
这次出现,下次还能出现。

程序健壮很关键,


有了这次教训,老板应该不会再贪便宜了。{:sweat:}

xymxym 发表于 2014-12-19 11:20:08

出问题的一直是同一个地址单元吗?写个测试程序验证一下。
配置上需要将BOR开起来。

fengyunyu 发表于 2014-12-19 11:23:01

zw_7627 发表于 2014-12-19 11:14
供应商说是贝能代理的,我们这次换了家供货商。前面都是找贝能拿货,没出过这个问题。 ...

LZ帮忙看下PIC单片机链接文件中的
__NO_HANDLES = 1;          /* Suppress handles on this device*/

是什么意思?

zw_7627 发表于 2014-12-19 15:10:21

fengyunyu 发表于 2014-12-19 11:23
LZ帮忙看下PIC单片机链接文件中的
__NO_HANDLES = 1;          /* Suppress handles on this device*/
...

不才愚昧,确实没有找到这句话出自何处?望大神引荐下,{:shy:} 我用的9.83的编译器。

fengyunyu 发表于 2014-12-19 15:17:43

zw_7627 发表于 2014-12-19 15:10
不才愚昧,确实没有找到这句话出自何处?望大神引荐下, 我用的9.83的编译器。 ...

p24FJXXGAXXX.gld

/*
** Linker script for PIC24FJ64GA306
*/

OUTPUT_ARCH("24FJ64GA306")
CRT0_STARTUP(crt0_extended.o)
CRT1_STARTUP(crt1_extended.o)

OPTIONAL(-lpPIC24Fxxx)

/*
** Memory Regions
*/
MEMORY
{
data(a!xr)   : ORIGIN = 0x800,         LENGTH = 0x2000
reset          : ORIGIN = 0x0,         LENGTH = 0x4
ivt            : ORIGIN = 0x4,         LENGTH = 0xFC
_reserved      : ORIGIN = 0x100,         LENGTH = 0x4
aivt         : ORIGIN = 0x104,         LENGTH = 0xFC
program (xr)   : ORIGIN = 0x200,         LENGTH = 0xA9F6-(0xA9F6+0x200-0xA400)
CONFIG4      : ORIGIN = 0xABF8,      LENGTH = 0x2
CONFIG3      : ORIGIN = 0xABFA,      LENGTH = 0x2
CONFIG2      : ORIGIN = 0xABFC,      LENGTH = 0x2
CONFIG1      : ORIGIN = 0xABFE,      LENGTH = 0x2

bootloader   : ORIGIN = 0xA400,      LENGTH = 0xA9F6+0x200-0xA400
}

__CONFIG4 = 0xABF8;
__CONFIG3 = 0xABFA;
__CONFIG2 = 0xABFC;
__CONFIG1 = 0xABFE;

__NO_HANDLES = 1;          /* Suppress handles on this device*/

__IVT_BASE= 0x4;
__AIVT_BASE = 0x104;
__DATA_BASE = 0x800;
__DATA_LENGTH = 0x2000;
__CODE_BASE = 0x200;
__CODE_LENGTH = 0xA9F8;


/*
** ==================== Section Map ======================
*/
SECTIONS
{
/*
** ========== Program Memory ==========
*/


/*
** Reset Instruction
*/
.reset :
{
      SHORT(ABSOLUTE(__reset));
      SHORT(0x04);
      SHORT((ABSOLUTE(__reset) >> 16) & 0x7F);
      SHORT(0);
} >reset

zw_7627 发表于 2014-12-19 16:16:46

fengyunyu 发表于 2014-12-19 15:17
p24FJXXGAXXX.gld

/*


不好意思,没用过这颗料,我也不晓得啊。貌似和我的帖子不相关吧{:sweat:}
页: [1]
查看完整版本: PIC的读内部EEPROM有一位出错,大神有碰到过吗