线传感器网络中,需要一个EEPROM来存路由表,93C46系列算是比较老的器件了,速度也不快,但手头正好有几个,就先拿来试验一下,本以为很容易搞定的,却遇到了个奇怪的现象,搞了一阵才解决。在实验之前,查了些93C46资料,读写函数都很正常,和大部分SPI器件一样,所以没仔细看数据手册,确定了通讯格式就开始实验,奇怪的问题就开始了,我用指定地址方式写入数据,依次写入“0,1,2,~,128”,读出来确是:“0,0,1,1,2,2,~,64,64”,换了测试数据,反复了几次,确定每个数据都被右移了一位,最高位被0补齐。死活找不到原因,乖乖去看手册,发现这段:
接收到读指令和地址后,DO 引脚先输出一个虚拟的低电平然后数据根据时钟信号移位输出
估计就是这东西导致了我的数据右移,接下来还有一段:
在第一个数据字移位输出以后,只要保持片选信号CS 不变和时钟信号SK 继续触发,器件会自动将地址加1 指向下一地址并且连续输出串行数据,只要保持片选和时钟信号SK 不断的输入,器件会把地址不断的增加直到器件的末地址然后地址回到0 ,在连续读出的模式下只有第一个数据输出的时候有输出虚拟0 位后面送出的数据都没有虚拟0 位
试了一下自动将地址加1 的方法,果然没有问题,但我一般需要随机读取,现在的解决办法只有在每次读完之后,自己直接操作SK,再来一次触发,读出最后一位。我纳闷的是难道没有人遇到这问题吗?还是大家都不用随机读取模式?还是我哪里的理解出了问题?