有关cc254x的I/O口的使用问题
最近我在用cc2540通过SPI读写Flash(SST25VF016B)时遇到了点问题,请教下!
实验环境:首先我是用cc2540裸跑的(没上协议栈),通过I/O口模拟SPI总线。代码在STC15L的51单片机上时正常的,移植到cc2540。遇到两个奇怪的问题:
问题1:我是用P1_5,P1_6和P1_7作为MOSI,CLK和MISO,当我用P1_4和P1_3作为Flash的片选CS端口时,两者均不能正常读出Flash的ID,且读出的结果不一样。而用P1_2作为CS时,可以正确地读出Flash的ID。注(P1DIR = 0x7f,除了MISO设为输入外,其他均设为输出)
问题2:在问题一种,CS采用P1_2引脚时,当P1DIR = 0x7f是,读Flash的ID正常,但如果我将P1DIR = 0x64是则,读出Flash的ID是不正确的。
问题总结:遇到的问题让我觉得片选引脚需要远离SPI总线(P1_2比P1_3/P1_4离SPI总线远些)。而且当I/O不使用时,需要设为输出,而不能设为输入(猜测是输入噪声问题)。
问题的确很奇葩,希望有经验的前辈给点提示,或提供些可参考的资料。
祝好!
对于CC2540不使用协议栈51编程,TI是有提供例程的 包括对SPI口的控制例程
可以参考一下
http://www.ti.com/lit/zip/swrc257
不用的管脚上拉输入
调试时,不要用杜邦线连SPI FLASH,不稳定
WBJ,你提供的链接对我非常有用,我参考了下代码,我现在能用硬件SPI读写Flash(SST25VF016B)了,问题是我发送完数据后没有等待完成,就接受数据!
但我现在发现不管用硬件SPI或IO口模拟发现,从Flash中读出的数据总有些是错的,而且总是那几个,偶尔会读对,这个问题还在解决中
cedar_xuesong ,谢谢你的建议!
我调试的时候的确用的是杜邦线链接Flash的,我目前的问题是,我从Flash中读到的数据有些是正确,有些是错误!我想知道你所说的不稳地是什么原因造成的呢?我猜想是如果降低SPI的读写速率会不会使系统稳定点,实际我发现将SPI的速率从2M降到9600bps还是一样的结果。
希望你能给点详细的说明,或任何有价值的资料!谢谢。。。
建议可以查一下时序
