打印

PSOC3 EEPROM问题

[复制链接]
1825|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rj_tang|  楼主 | 2013-5-14 17:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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));
            }
沙发
PSoC小子| | 2013-5-14 18:11 | 只看该作者
EEPROM 写操作时需要提供一定的电流,这个电流值不是恒定的,而是根据当前芯片核心的温度来调整的,这样可以保证在全温度范围内 EEPROM 写操作的可靠性。 这也是为什么在 EEPROM 写操作前需要调用 CySetTemp() 函数来获取当前芯片的核心温度。

这段代码不是出现死循环,CySpcReadData(dieTemperature, 2) 返回的不是具体温度值而是 Data Size(返回值是否是 2 bytes). 只要测量结束,返回值的 size 是 2bytes 是无疑的,所以不会死循环。

使用该模块时,如果芯片的环境温度变化不大(5度之内),只要在初次写操作之前调用 CySetTemp(),不必每次都调用。但是如果温度变化 大于5 度,则需要再次调用该函数以获取最新的芯片核心温度。 我个人觉得,如果你不是经常写 EEPROM 的话, 每次写之前调用就好了, 如果写的比较频繁,那么可以选择定时调用该函数。

使用特权

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

本版积分规则

31

主题

159

帖子

0

粉丝