最近我在用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不使用时,需要设为输出,而不能设为输入(猜测是输入噪声问题)。
问题的确很奇葩,希望有经验的前辈给点提示,或提供些可参考的资料。
祝好!