monome / teletype

monome eurorack module
GNU General Public License v2.0
203 stars 84 forks source link

Customize NVRAM address to enable larger core flash program #252

Closed trentgill closed 3 years ago

trentgill commented 3 years ago

What does this PR do?

Sets a custom symbol for the linker script, causing the NVRAM to be moved further into the flash address space. This was necessitated as the TT program has grown beyond the allotted 256KB flash reserved for it.

NVRAM is just a marker in the flash memory space which enables an additional interface for read/writing data. It does not require any special hardware support, and the location is arbitrary - the flash memory it controls is homogeneous.

TT uses the NVRAM address marker as the basis for all non-volatile data storage (Saved scenes, and calibration data). The 512KB of flash memory was previously split 256/256kB between program/data (the default). This PR changes the split to 312/200kB. The current usage of NVRAM is ~198kB, so if any substantial amount of data is added to the stored data, this variable may need to be updated.

Provide links to any related discussion on lines.

https://llllllll.co/t/teletype-firmware-discussion/13961/102?u=galapagoose

How should this be manually tested?

Typical TT usage, and particularly, making sure saved Scenes & calibration data are working across power cycles.

Any background context you want to provide?

If the related Github issues aren't referenced in your commits, please link to them here.

fixes #250

I have,

tehn commented 3 years ago

gah. i just did this same thing, with a different route (made an additional lds file for teletype)

we can go this route instead, if we don't think any other bits of the lds will need modifying

scanner-darkly commented 3 years ago

this might be a better option - since this setting might need to change in the future (if we free enough memory through refactoring and need to add something else to stored scenes), it’s easier to change it just in the main repo as opposed to having to change libavr32 as well