CC2538 SSI接口跟W5500芯片的SPI通信问题
SSI的IO口配置
SysCtrlPeripheralEnable(SYS_CTRL_PERIPH_SSI0);
SSIClockSourceSet(SSI0_BASE,SSI_CLOCK_PIOSC);
IOCPinConfigPeriphOutput(GPIO_A_BASE, GPIO_PIN_2, IOC_MUX_OUT_SEL_SSI0_CLKOUT);
IOCPinConfigPeriphOutput(GPIO_A_BASE, GPIO_PIN_5, IOC_MUX_OUT_SEL_SSI0_TXD);
// IOCPinConfigPeriphOutput(GPIO_A_BASE, GPIO_PIN_3, IOC_MUX_OUT_SEL_SSI0_FSSOUT);
IOCPinConfigPeriphInput(GPIO_A_BASE, GPIO_PIN_4, IOC_SSIRXD_SSI0);
GPIOPinTypeSSI(W5500_SPI_BASE, GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5);
GPIODirModeSet(W5500_SPI_BASE,GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5,GPIO_DIR_MODE_HW);
// IOCPadConfigSet(W5500_SPI_BASE,GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5,IOC_OVERRIDE_PUE);
GPIOPinTypeGPIOOutput(W5500_SPI_CS_PORT,W5500_SPI_CS);
GPIOPinTypeGPIOOutput(W5500_RESET_PORT,W5500_RST);
GPIOPinTypeGPIOOutput(W5500_INT_PORT,W5500_INT);
时钟源用的是SysCtrlIOClockGet();
SPI的子程序
uint8 SPI_SendByte(uint8 byte)
{
uint32 tmp=0;
SSIDataPutNonBlocking(SSI0_BASE,byte);
while(SSIBusy(SSI0_BASE));
SSIDataGetNonBlocking(SSI0_BASE,&tmp);
return (uint8)tmp;
}
从波形图上,只要连上MISO线,W5500的输出数据就不对了;这个波形图是CC2538测试出来的,ZSTACK的版本是HOME1.2.2a;
同样的模块,我原本怀疑W5500模块是不是有问题,所以就又用STM32的芯片测了一下W5500,结果正常,所以只能怀疑CC2538的问题;
求帮忙看下这个是不是哪里配置有问题啊,不连接MISO就没办法接收数据;搞了好久了;
产品是物联网用的产品;
请参考CC2538 Foundation Firmware中的SSI例程,地址:http://www.ti.com/tool/cc2538-sw
发送都没啥问题,就是接收很奇怪,连接和不连接MISO,接收的数据就是不一样,我是参考SWRU325A.pdf里面的API来做的,但是,没啥效果,试了各种方法,就是不行,只要连着,每次接收的数据都不是一样的,感觉是2538的MISO管脚配置错了,但是该配置的都配置过了,不该配置的也都试过了,没啥用,网上找了好多配置方法也试过了,都没啥用;有没有推荐的配置方法,我再试试;反正只要不插MISO线都是好的,插了就不行了 。
你看看你GPIO_PIN_5这个脚是不是在别的什么地方配置成GPIO功能了,十有八九都是如此
5脚是发送脚吧,发送没问题啊,发送完全正常,就是接收也就是第四脚,看了下代码,都没有用到GPIO4的,除了我自己的程序,应该是没用到才对,这个接口默认好像就是给SPI用的样子,程序版本的原始版本是官网下载的 ZSTACK HOME 1.2.2A
我测了一下,更换成其他PORT口,还是一样的现象,跟GPIO被占用应该是没关系,应该不可能全部都被用了吧