This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
您好,
我正在使用MSP430F5328接口和使用SPI通信协议的W25X10 winbound串行闪存。 我正在使用SMCLK 16MHz。
我已根据从属设备和源代码配置SPI,如下所示:
#define SPICLK 32.
UINT8_t SourceAddr [16];
UINT8_t DestAddr[16];
void main( void )
{
uint16_t IDcode = 0;
//设置为从属设备重置的WFP 2.6
GPIO_setAsOutputPin (GPIO端口P2,GPIO_PIN6);
GPIO _setOutputHighOnPin( GPIO端口P2,GPIO _PIN6 );
//WFP,3.3 4选项选择
//FLASH_SPISIMO - WFP 3.3
//FLASH_SPISOMI - WFP 3.4
GPIO_setAsPeripheralModuleFunctionInputPin (GPIO端口P3,GPIO端口PIN3 + GPIO PIN4);
//WFP 2.7 FLASH_SPICLK
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P2, GPIO_PIN7);
//初始化主中继器
USI_A_SPI_initMasterParam参数={0};
param.selectClockSource = USI_A_SPI_CLOCKSOURCE_SMCLK;
Param.clockSourceFrequency = UCS_getSMCLK();
param.desiredSpiClock = SPICLK;
Param.msbFirst = USI_A_SPI_MSB_FIRST;
Param.clockPhase = USI_A_SPI_PHASE DATA_Changed_ONFIRST_Captured_on_next;
Param.clockPolarity = USI_A_SPI_CLOCKPOLARITY_INACILY_LOW;
返回值= USI_A_SPI_initMaster(USCI_A0_base,¶m);
如果(status_fail == returnValue)
返回0;
//启用SPI模块
USI_A_SPI_ENABLE (USI_A0_BASE);
//现在已初始化SPI信号,重置从属设备
GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN6);
/*正在读取制造商ID */
IDcode =
SerialFlash_readid();
}
UINT16_t SerialFlash_readid (void)
{
uINT16_t ID代码;
// WFP 2.6 --0,CS =0选择SPI闪存
GPIO _setOutputLowOnPin (GPIO端口P2,GPIO _PIN6);
//读取设备命令 0x90
SourceAddr[0]= 0x90;
//设备地址0x00的上部
SourceAddr[1]= 0x00;
//设备地址0x00的下半部分
SourceAddr[2]= 0x00;
SourceAddr[3]= 0x00;
//串行闪存发送数据
SerialFlash_SendData ((uint8_t *)&SourceAddr[0], 4);
__DELAY周期(16万);
//串行闪存接收数据
SerialFlash_RcvData((uint8_t *)&DestAddr[0],2);
// WFP 2.6 --1, CS =1释放SPI闪存
GPIO _setOutputHighOnPin (GPIO端口P2,GPIO _PIN6);
//获取ID代码
IDcode =(DestAddr[0]<<8)|(DestAddr[1]);
返回ID代码;
}
void SerialFlash_SendData( uint8_t *buf,UINT32_t长度)
{
uINT32_t i;
用于( I =0;I <长度;I++)
{
// USI_A0 TX缓冲器就绪?
同时(!(UCA0IFG&UCTXIFG));
UCA0TXBUF =* buf;
buf++;
}
}
void SerialFlash_RcvData( uint8_t *buf,UINT32_t长度)
{
uINT32_t i;
用于( I =0;I <长度;I++)
{
// USI_A0 RX缓冲器准备就绪?
同时(!(UCA0IFG&UCRXIFG));
*buf = USI_A_SPI_receiveData(USCI_A0_base);
buf++;
}
}
我已经检查了示波器上的MOSI和时钟信号,并取得了完美的结果。
但我无法在接收器缓冲区上正确读取制造商ID。 大多数情况下会获得0xFF,0xFF或有时会获得一些随机值。
请大家帮我解决这个问题。
谢谢,此致,
John
不知怎么的,此帖子在编译器论坛中出现了2次。 我们的编译器专家无法回答这个问题。 我将 另一条线程移至 MSP设备论坛。 请在此处关注。
谢谢,此致,
-George