EEPROM模块应用

[复制链接]
684|9
手机看帖
扫描二维码
随时随地手机跟帖
xxmmi|  楼主 | 2017-4-22 23:10 | 显示全部楼层 |阅读模式
PSOC3 EEPROM模块应用中,有个温度问题,没有相关文档详细说明。
CyFlash.c中有一段代码,会出现死循环吗?
如果要在全温度范围应用内置EEPROM,应如何处理?

            /* Write the command. */
            if(CySpcWriteCommand(0, 0) == CYRET_STARTED)
            {
                do
                {
                    if(CySpcReadData(dieTemperature, 2) == 2)
                    {
                        status = CYRET_SUCCESS;
                        /* Spin until idle. */
                        while(!(*SPC_STATUS & SPC_SPC_IDLE))
                        {
                            CyDelayUs(1);
                        }
                        break;
                    }
                    /* Spin until completion. */
                } while(!(*SPC_STATUS & SPC_SPC_IDLE));
            }
zwll| | 2017-4-22 23:12 | 显示全部楼层
EEPROM 写操作时需要提供一定的电流,这个电流值不是恒定的,而是根据当前芯片核心的温度来调整的

使用特权

评论回复
chuxh| | 2017-4-22 23:14 | 显示全部楼层
对,这样可以保证在全温度范围内 EEPROM 写操作的可靠性

使用特权

评论回复
stly| | 2017-4-22 23:15 | 显示全部楼层

是的,这也是为什么在 EEPROM 写操作前需要调用 CySetTemp() 函数来获取当前芯片的核心温度。

使用特权

评论回复
dingy| | 2017-4-22 23:19 | 显示全部楼层
这段代码不是出现死循环,CySpcReadData(dieTemperature, 2) 返回的不是具体温度值而是 Data Size(返回值是否是 2 bytes). 只要测量结束,返回值的 size 是 2bytes 是无疑的,所以不会死循环。

使用特权

评论回复
pengf| | 2017-4-22 23:20 | 显示全部楼层

使用该模块时,如果芯片的环境温度变化不大(5度之内),只要在初次写操作之前调用 CySetTemp(),不必每次都调用。

使用特权

评论回复
supernan| | 2017-4-22 23:22 | 显示全部楼层
嗯,但是如果温度变化 大于5 度,则需要再次调用该函数以获取最新的芯片核心温度。

使用特权

评论回复
xxrs| | 2017-4-22 23:23 | 显示全部楼层
如果你不是经常写 EEPROM 的话, 每次写之前调用就好了

使用特权

评论回复
houcs| | 2017-4-22 23:26 | 显示全部楼层

是啊,如果写的比较频繁,那么可以选择定时调用该函数。

使用特权

评论回复
xxmmi|  楼主 | 2017-4-22 23:28 | 显示全部楼层
哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

369

主题

4278

帖子

2

粉丝