我对SSI1进行了配置,用来驱动AT45DB161D,经示波器测试,输出信号正确,但ssi接收数据总是0x00,但AT45DB161D输出的数据不是0x00,请问是什么问题?
我对SSI1进行了配置,用来驱动AT45DB161D,经示波器测试,输出信号正确,但ssi接收数据总是0x00,但AT45DB161D输出的数据不是0x00,请问是什么问题?
恩,我也觉得是配置的问题,以前做过LM3F的程序,移植过来就不对了,不知道问什么。
ssi1 相应的配置如下:
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//置SPI为模式0,主机模式,波特率,数据宽度为8位
//SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(),SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 40000, 8);
SSIConfig(SSI1_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 40000, 8);
SSIEnable(SSI1_BASE);
GPIOPinConfigure(GPIO_PF0_SSI1RX);
GPIOPinConfigure(GPIO_PF1_SSI1TX);
GPIOPinConfigure(GPIO_PF2_SSI1CLK);
GPIOPinTypeSSI(GPIO_PORTF_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2));
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_DIR_MODE_OUT); //配置片选管脚为输出
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); //配置片选管脚为推挽,4MA输出
经测试还是不正常,望解答,谢谢。
Haitao Yuan :
见上所附代码 发现几处疑点:
1. AT45的片选应该是连接至SSI的Fss管脚吧?但代码中并未对Fss管脚进行配置
2.推荐连接片选的管脚配置为----上拉2MA输出
因此,推荐配置流程如下:
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SSIConfigSetExpClk( SSI1_BASE,
SysCtlClockGet(),
SSI_FRF_MOTO_MODE_0, //模式0
SSI_MODE_MASTER, //主机模式
BIT_RATE, //波特率
DATA_WIDTH //数据位
);
SSIEnable(SSI1_BASE);
GPIOPinTypeSSI( GPIO_PORTF_BASE, // 设置GPIOF0,1,2,3引脚为SSI配置功能
GPIO_PIN_3 |
GPIO_PIN_2 |
GPIO_PIN_1 |
GPIO_PIN_0);
GPIOPinConfigure(GPIO_PF0_SSI1CLK);
GPIOPinConfigure(GPIO_PF1_SSI1FSS);
GPIOPinConfigure(GPIO_PF2_SSI1RX);
GPIOPinConfigure(GPIO_PF3_SSI1TX);
GPIODirModeSet( GPIO_PORTF_BASE, // 配置片选管脚为输出
FLASH_CE, //AT25片选 宏定义为0x00000002即管脚GPIO_PIN_2 Fss
GPIO_DIR_MODE_OUT);
GPIOPadConfigSet( GPIO_PORTF_BASE, // 配置片选管脚为上拉,2MA输出
FLASH_CE,
GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD);
SSI1 用PF配置时RX为PF0,PF0是特殊管脚与NMI复用,所以要在GPIOLOCK和GPIOCR中进行相应配置