其实,在TinyOS系统内部,对CC2420与FLASH芯片上的SPI资源分配上已经实现好了,不需要用户自己调用Resource()接口,然后又再去释放资源。用户只需要调用Flash的接口的读写函数就可以了。
说到Telosb节点上FLASH的使用,说明文档给出了三种使用的方法。分别是:块存储Block、配置存储Config、日志存储Log。各种方法调用的FLASH读写组件都不同。但是,系统内部都同样已经实现了对其SPI总线使用的资源调度。也就是说,同样不需要用户自己分配SPI总线。
在测试的过程中,我需要把AD采集得到的数据存入FLASH,就开始测试FLASH 的读写问题。结果发现,ConfigStorage的方法比较慢,每次读写FLASH之间至少需要隔2秒的时间。至于为什么这么慢,看系统的文件我也没看出来。反正就是系统实现的,自己用就是了。
然后就是BlockStorage的方式,这个还好一点,每次读写的间隔只需要70ms左右。 日志模式,我猜也没什么用,就没去看了。
- uses interface BlockRead;
- uses interface BlockWrite;
- uses interface ConfigStorage;
- uses interface Mount ;
2012年1月10日
博客荒废太久了,事情搞定之后就没有了想记录一下的动力,攻破了一个困难之后,好开心,心情就放松得很,不去回忆一下解决问题的过程,不记录经验,很快又忘了。下次,完成一项任务之后,就要立马把其中的解决难题的方法记录下来,不要养成拖拖拉拉的坏习惯。
其实在读写FLASH M25P80的时候,还有一个问题当时没搞清楚。那就是,每次写FLASH之前,都要确保所写的区域已经擦除过。FLASH不同于E2PROM,以前读写24C20的时候也不用什么擦除的,FLASH则不同。而M25P80的擦除分为扇区(sector erase)擦除和全擦除(bulk erase) 。擦除完毕之后,写入的话就有 页写入指令,当然,用页写入指令也不是每次都要规定入户写入完整的256个字节,可以写少于256字节的,多于256的话,那么前256字节将会丢弃,只在同一个地址写入多出的数据。