PIC的读内部EEPROM有一位出错,大神有碰到过吗
PIC16F630解码PT2240批量生产,这段时间遇到奇怪的现象。一把遥控器可以学习两次,查了很久,发现EEPROM写入正常,但读出来就发现其中一个字节的bit3位,老是把0读成1,但是没有把1读成0.已经排除其他软件部分对读操作的干扰。明天给供应商电话,用了这么久PIC的片子,第一次发现读EEPROM的某一位出错。去年买到假货,写一个字节都错了,假货难防啊。 暂时没碰到过,你的程序有校验措施吗?。。。 这次出现,下次还能出现。程序健壮很关键,
如果对写入要求严格,可以写入之后,立刻读一下,检验二者值是否一样,以保证正确写入。
如果对读出要求严格,可以写入时增加一个校验位, 读出的时候判断一下,通过校验的才读取。
没遇到过,楼主认真检查先程序 先要从程序上排除,如前面网友所说,写入之后马上回读一下,以验证写入是不是正确的 是每个字节的读取都会出现这个问题,还是只有一个字节位。除此之外,是不是只有一个芯片出错,如果都是个例,换个芯片就好了。但是长出问题,就是程序上需要检查了 翻新的到有可能,假货不会吧。 本帖最后由 zw_7627 于 2014-12-19 11:15 编辑
markdif 发表于 2014-12-17 16:37
暂时没碰到过,你的程序有校验措施吗?。。。
有校验,写入后读出,不一致再写一遍。写入没有问题。后面的是读出后,再写入,把F7写成FF了。 fengyunyu 发表于 2014-12-17 22:51
翻新的到有可能,假货不会吧。
供应商说是贝能代理的,我们这次换了家供货商。前面都是找贝能拿货,没出过这个问题。 xianghaisha 发表于 2014-12-17 21:34
是每个字节的读取都会出现这个问题,还是只有一个字节位。除此之外,是不是只有一个芯片出错,如果都是个例 ...
的确是换芯片后,就解决了。 wicy001 发表于 2014-12-17 16:40
这次出现,下次还能出现。
程序健壮很关键,
有了这次教训,老板应该不会再贪便宜了。{:sweat:} 出问题的一直是同一个地址单元吗?写个测试程序验证一下。
配置上需要将BOR开起来。 zw_7627 发表于 2014-12-19 11:14
供应商说是贝能代理的,我们这次换了家供货商。前面都是找贝能拿货,没出过这个问题。 ...
LZ帮忙看下PIC单片机链接文件中的
__NO_HANDLES = 1; /* Suppress handles on this device*/
是什么意思? fengyunyu 发表于 2014-12-19 11:23
LZ帮忙看下PIC单片机链接文件中的
__NO_HANDLES = 1; /* Suppress handles on this device*/
...
不才愚昧,确实没有找到这句话出自何处?望大神引荐下,{:shy:} 我用的9.83的编译器。 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
fengyunyu 发表于 2014-12-19 15:17
p24FJXXGAXXX.gld
/*
不好意思,没用过这颗料,我也不晓得啊。貌似和我的帖子不相关吧{:sweat:}
页:
[1]