PIC24F和spi flash通信
有没有人做过PIC和w25q64的通信,我SCK和SDI波形正确,但是没有波形输出好好查查slave对命令信号的格式要求和时序要求
你看看IO口的初始化嘛...如果是模拟复用口, 要初始化成数字口的哈.
已经确认过IO是数字口,而且时序也满足slave的要求了,slave就是没有输出
只能直接下载或是先用MPC82G516搭配OCD_ICE仿真
int main(void)
{
// initialize the device
uint8_t temp0,temp1,temp2=0;
SYSTEM_Initialize();
_TRISF0 = 0;
_LATF0 = 1;
while (1)
{
SPI1_Exchange8bit(0x9F);
temp0 = SPI1_Exchange8bit(0xFF);
temp1 = SPI1_Exchange8bit(0xFF);
temp2 = SPI1_Exchange8bit(0xFF);
printf("%x, %x, %x,",temp0,temp1,temp2);
DELAY_milliseconds(2000);
}
return 1;
} void SPI1_Initialize (void)
{
// MSTEN Master; DISSDO disabled; PPRE 4:1; SPRE 4:1; MODE16 disabled; SMP Middle; DISSCK disabled; CKP Idle:Low, Active:High; CKE Active to Idle; SSEN disabled;
SPI1CON1 = 0x132;
// SPIFSD disabled; SPIBEN enabled; SPIFPOL disabled; SPIFE disabled; FRMEN disabled;
SPI1CON2 = 0x01;
// SPITBF disabled; SISEL SPI_INT_SPIRBF; SPIRBF disabled; SPIROV disabled; SPIEN enabled; SRXMPT disabled; SPISIDL disabled;
SPI1STAT = 0x800C;
}
void SPI1_Exchange( uint8_t *pTransmitData, uint8_t *pReceiveData )
{
while( SPI1STATbits.SPITBF == true )
{
}
SPI1BUF = *((uint8_t*)pTransmitData);
while ( SPI1STATbits.SRXMPT == true);
*((uint8_t*)pReceiveData) = SPI1BUF;
}
uint8_t SPI1_Exchange8bit( uint8_t data )
{
uint8_t receiveData;
SPI1_Exchange(&data, &receiveData);
return (receiveData);
} 那就是操作时序和命令不对
楼主使用的几线制的spi通讯方式啊 模拟口和数字口的区别是什么他们的用途分别是什么呢 硬件连接上加没有加外部的上拉电阻呀 tian111 发表于 2022-12-4 12:50
已经确认过IO是数字口,而且时序也满足slave的要求了,slave就是没有输出
都么有波形输出 楼主如何确定时序满足要求呢 如果只是一一对应连接的话 就用普通的三线连接就行 虽然时序是没有问题的 但是是不是需要双方的配合啊 SDO都没有输出,是怎么测出来SDI信号的?
页:
[1]