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.
工具/软件:Code Composer Studio
您好!
我尝试将28335与 wiz-net W5500连接,但在尝试建立连接时遇到了一些问题。
出于测试目的、w5500中有一个回读寄存器、如果连接完美、该寄存器应回读值0x04。 但不幸的是、每次都能得到错误的值。
相同的源代码如下所示
InitSpiaGpio()
{
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0;//启用 GPIO54上的上拉电阻(SPISIMOA)
GpioCtrlRegs.GPBPUD.bit.GPIO55 = 0;//启用 GPIO55上的上拉电阻器(SPISOMIA)
GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0;//启用 GPIO56上的上拉电阻器(SPICLKA)
GpioCtrlRegs.GPBPUD.bit.GPIO57=1;//启用 GPIO57上的上拉电阻器(SPISTEA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3;//异步输入 GPIO17 (SPISOMIA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3;//异步输入 GPIO18 (SPICLKA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3;//异步输入 GPIO19 (SPISTEA)
GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1;//将 GPIO54配置为 SPISIMOA
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1;//将 GPIO55配置为 SPISOMIA
GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;//将 GPIO56配置为 SPICLKA
GpioCtrlRegs.GPBMUX2.bit.GPIO57=1;//将 GPIO57配置为 SPISTEA
GpioDataRegs.GPBSET.BIO57 = 1;//将 SPISTEA 置为高电平空闲
// GPIO 引脚配置为复位引脚
GpioCtrlRegs.GPBPUD.bit.GPIO63 = 1;//启用上拉
GpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 3;
GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1;//
GpioDataRegs.GPBCLEAR.bit.GPIO63=1;
uint16 tmp = 0xFF;
while (tmp--);
GpioDataRegs.GPBSET.BIO63 = 1;
}
void SPI_init()
{
SpiaRegs.SPICCR.all =0x0047;//复位打开、下降沿、8位字符位
SpiaRegs.SPICTL.ALL =0x00E;//启用主控模式、正常相位、
//启用 TALK、禁用 SPI int。
SpiaRegs.SPIBRR = 0x001F;
SpiaRegs.SPICCR.all =0x00C7;//从复位中撤回 SPI
SpiaRegs.SPIPRI.bit.FREE = 1;//设置断点以避免干扰 xmission
}
void_ReadVersionReg ()
{
GpioDataRegs.GPBCLEAR.bit.GPIO57=1;//STE 低电平
sdata = 0x0039;
SPI_xmit (sdata);
sdata = sdata>>8;
SPI_xmit (sdata);
sdata = 0x0000;
SPI_xmit (sdata);
sdata =sdata>>8;
SPI_xmit (sdata);
GpioDataRegs.GPBSET.BIO57=1; //STEA 高电平
RDATA = 0x00;
RDATA = SpiaRegs.SPIRXBUF;
}
Sooraj、
W5500 1字节数据读取格式为:
16位地址阶段:0x0039 (当您尝试访问芯片版本寄存器时)
8位控制阶段: 0x00 (在 VDM 模式下读取)(或) 0x0001 (在 FDM 模式下读取命令寄存器(1字节)
8位数据阶段 :0x00 (虚拟发送从 W5500接收1个字节。
1) 1)首先、如果要将 GPIO57配置为 SPISTEA、则无需手动设置和清除 GPIO57、SPI 硬件将自动控制它。 如果您希望手动控制它、则需要将 GPIO57配置为 GPIO 输出引脚。
2) 2)您是否尝试使用 SPI 协议分析器探测 SPI 总线? SPI 帧是什么样的? 它是否与 W5500的 SPI 帧格式相匹配
3) 3)在读取 SPIRXBUF 寄存器之前检查 SPISTS.INT_FLAG。 这将确认 SPI 已收到指定的完整字符。
此致、
曼诺伊
主席先生,
感谢帮助。
是的,我将 GPIO57配置更改为 GPIO 输出。
我探测 SPI 总线、信号似乎符合要求。 这是 MOSI 线路和时钟的屏幕截图。
黄色表示 SPI 时钟、绿色表示 MOSI 线路。
我更改了数据传输代码、如...can 您确认代码正在执行所需的操作、
uint8 SPI_DATA[4]={0、};
uint8 i;
SPI_DATA[0]= 0x00;
SPI_DATA[1]= 0x39;
SPI_DATA[2]= 0x00;
SPI_DATA[3]= 0x00;
GpioDataRegs.GPBCLEAR.bit.GPIO57=1;/cs 低电平
对于(i=0;i<4;i++)
{
SpiaRegs.SPITXBUF =(SPI_DATA[I]<<8);
}
RDATA =SpiaRegs.SPIRXBUF>>8;
GpioDataRegs.GPBSET.BIO57 = 1;
此外、读取 SpiaRegs.SPISTS.bit.INT_FLAG 也会为我提供0。 这是否意味着我的数据无法正确发送?
我在您的代码片段中没有看到任何明显的错误。 但是、您的示波器快照在 SPICLK 和 MOSI 信号上都显示了大量噪声。 观察到的 EMI 噪声可能是由于阻抗匹配不当而产生的振铃噪声引起的。 这里的问题是噪声足够高、以至于错误读取错误的位会破坏您的通信。
此致、
曼诺伊
Manoj、
感谢主席先生的支持和帮助。
我能够解决这个问题。 我认为问题是 SPI 模式和 STEA 信号。 我能够纠正它。
您能解释更多有关问题是什么以及如何解决的说明吗?
此致、
曼诺伊