低阶级单片机扩展flash空间的实验招数共享
外扩flash代码空间对所有单片机本不是问题,问题是若还想用串口载入数据就对单片机有要求了。按常规串口载入得开辟2个很大的缓冲数组(如256字节)分时倒换数据,内存开销忒大,以至于俺这里“在用量”极大的STC的256SRAM档芯片都不能运行,太不公平了。因此俺决意要尝试突破、搞掂维权的科学实践。 不料俺的机缘和运气都很好,刚好有现成的实验板、网购的一片8M字节flashMX25L6404只要1块钱、板上刚好有个8pin时钟芯片位置刚好安放8M字节的flash芯片,供电引脚刚好一致、就近改接STC芯片的SPI口方便极了、网络烧友刚好又有许多切合俺参考的现成代码。几经小试惊奇如意之感受真是大大的。在这先不待显掰,只说说切题要点。
俺先用2K内存的IAP15F2K61实验,使用STC下载软件附带的“串口助手”就能够方便的载入多达8M字节得数据了。原来STC芯片最大也只61K字节代码空间,塞进一幅128X160彩图有40.96K字节要占去STC芯片的大半空间,曾叫俺心痛不已。而现在放200幅图片不在话下。俺常用的40X72大点阵仪表数字符再多都不会发愁了。
可是,若改用1K内存的芯片就尽出问题,不能稳定工作了。在256字节内存的RIC15W154实验板上竟然还无法启动,进不去界面。都这内存开销给闹的。不过俺还是得尝试变通,笃定要让广大的低内存单片机都可幸享受这flash“优厚的福利”。
最后俺尝试的两招式终于有了成效。1是设置程序为“按键加电”的方式进入flash的串口转载状态,这样就有条件独享单片机的有限资源了。2是把原来的两个缓冲区数组Copybuf[250]和 Uartbuf[250]分别调降为[32],其他散碎数组尽量精简复用。如此,不得已繁琐了一点数据处理过程、牺牲了一点运行速度,好歹叫程序能够顺利运行了、串口数据能够由此成功载入了。
有图为证:
1块钱的MX25L6406flash,2块8的IRC15W415单片机(价廉功能贱SRAM只有512字节、程序空间只14K字节)。
俺用Kile写的代码约定,按着K1上电进即入flash装载状态,此时屏幕不亮,STC软件的串口助手连通,显示等待输入欲刷入的数据容量与起始扇区,并提示按需要与否檫除flash。
按了K2进入整片檫除,然后再提示输入。
发送了数据容量与起始扇区,点入了数据文件(这里是18幅128X160彩色图片,每幅40.960K字节)。开始檫除了。
刷写过程显示百分比进度。显示“OK”则报导刷写成功。
再刷入0-F字符(40X72),每字360个字节。
安放到flash尾部,不妨碍继续增加图片。
于是STC的flash的程序空间腾空了,字库空间一下子感觉宽裕得不得了
更小程序空间的便宜STC芯片也可以使用漂亮的大点阵字库和许多的彩色图片了。
尤其适合仪器仪表用美丽的大数字字符显示。
细腻、美观才彰显档次与派头。
感觉8M字节空间宽裕极了,居然可以再放180幅图片。这只有用flash才做得到。
俺的代码约定,短按K1下翻图片,短按K2上翻图片,长按K1>3S删除当前页。可以在任意指定扇区插入图片。实验证明安排很靠谱。
觉得这个彩屏性价比特高,却卖得比单色128X64还便宜许多,莫名其妙的如此不受待见。
可能因为是并口驱动,总共要占去13个I\O口,或嫌端口开销太大。
而且是2串LED背光,需要升压驱动,或嫌比较麻烦,用得辛苦。
殊不知STC有PWN功能、推挽输出功能,只用二极管+电容,背光驱动就被俺漂亮的搞定了。
一般的实验用28pin封装的STC其I\O资源够消费的了。
体验到翻屏够快,用做彩图数码是可行的。
看到了还有网购的16M字节25L128flash只2块钱。
相比之下flash较EEprom的性价比高很多。
不过刷入数据得以扇区为单位,读取倒是可随意。
0X1000字节为一扇区,这里的一幅图片为0XA000字节及10个扇区(2个8位字节才表达一个像素点)。
于是俺的仪表设置菜单用某熟女作背景,其冷艳庄重符合咱仪表风格。
还有大方的外国姐姐或平衡一点你的不屑。
实验让俺进一步认识了flash”真的了得“,弄清了许多革命原理,还表现出让俺自给感动了好多回的应变技巧。自觉好啊。
感谢STC、感谢烧友、感谢网购、感谢机缘赐予俺的所有得。