Memorized Array / EEPROM question

Rick 6 years ago in IQANdesign updated 6 years ago 3

Not sure how memory-writes work in IQAN, so wWe were wondering if large (4096 elements) could be a potential problem.

A large array is used to store adjustable settings, coming from an input terminal. We don't have that many parameters really -typically 100 or so- but we use ID-number-referencing to quickly SET/GET a stored value.

To my knowledge, EEPROM writes should be limited as much as possible. So if I change one element in this array, do all 4096 elements get rewritten into EEPROM, or just that single spot? Or to put the question differently is it recommended to use separate Memorize channels instead of big arrays? The reason we chose arrays is to quickly code stuff, regardless if there are 10 or 1000 parameters.

And about limiting, when does IQAN actually write its EEPROM? As soon as something changes in an Array or when a Memorize channel is triggered, or does it do some smart stuff behind the scenes?

Satisfaction mark by Rick 6 years ago

No modern IQAN product use EEPROM, the last module that had this type of memory was the MDM.

Since 2004, all new IQAN master modules use FRAM for the settings memory instead of the older EEPROM. FRAM memory is faster and has practically unlimited number of write operations. 

This allows the settings, e.g. MEM, ECNT or ARC channels to be written every cycle if this is how the application is done.

What you have to be careful about with large arrays is the size of the settings memory. This is relatively easy, just check the project statistics. 

What is more tricky is the impact a large array can have on your cycle utilization. If you perform a Qreset on an array of this size, you will have a huge peak in cycle utilization. You might have to increase  the cycle time you set in the application a lot to stay below 100% cycle utilization in this situation.  

Good to know!

Well, turns out then we've been a bit too careful with memory writes in the past, programming all kinds of tricks to delay/suspend memory writes that weren't really necessary :)