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.

[参考译文] CCS:28335 McBSP 用作 SPI、接收数据始终为0xFF

Guru**** 2024750 points
Other Parts Discussed in Thread: CONTROLSUITE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/789628/ccs-28335-mcbsp-used-as-spi-receive-data-is-always-0xff

工具/软件:Code Composer Studio

您好!

我在用作 SPI 操作的 McBSP 上遇到了问题。我在  SPI 回送模式下测试了 McBSP 的 controlSUITE 中的示例。 它位于..\controlSUITE\device_support\f2833x\v141\DSP2833x_examples_ccsv5\McBSP_SPI_loopback。 当我   用2 (16位 )或0 (8位)更改"McbspbRegs.RCR1.bit.RWDLEN1=5;"时、它运行良好。它运行良好。

但是当我 设置 DLB=0时、接收数据总是0xff、我不能这么做。

我的配置硬件:

GPIMO、MOSI、CLK 信号连接闪存(IS25LP064) 和 MCP2515.Flash CS 信号使用在 DO 模式下设置 的 GP59引脚、MCP2515 CS 信号使用在 DO 模式下设置的 gp27引脚。

我的可配置软件:

void McBSP_GPIO_init (void)
{

EALLOW;
//使用 GPIO 寄存器配置 McBSP-A 引脚*/
//这指定哪些可能的 GPIO 引脚将是 McBSP 功能引脚。
//注释掉其他不需要的行。
GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 3;// GPIO24是 MDXB 引脚(根据需要提供注释)
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 3;// GPIO25是 MDRB 引脚(根据需要提供注释) GpioCtrlRegs.GPAMUX2.bit.GPIO2=3;
/ GPIO3.Gpio216.CMO3.B 引脚(需要提供注释)
// GPIO27是 MFSXB 引脚(根据需要注释)
//启用所选引脚的内部上拉*
//用户可以启用或禁用上拉。
//这将启用指定引脚的上拉电阻。
//注释掉其他不需要的行。
GpioCtrlRegs.GPAPUD.bit.GPIO24=0; //在 GPIO24 (MDXB)上启用上拉(根据需要添加注释)
GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; //在 GPIO25 (MDRB)上启用上拉(根据需要注释)
GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; //启用 GPIO26 (MCLKXB)上的上拉电阻(根据需要注释)
// GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0; //在 GPIO27 (MFSGB)上启用上拉电

阻(根据需要注释)//将所选输入引脚的限定条件设置为仅异步*/
//这将为所选引脚选择异步(无限定条件)。
//注释掉其他不需要的行。
GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3;//异步输入 GPIO25 (MDRB)(需要注释)
GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3;//异步输入 GPIO26 (MCLKXB)(需要注释)
// GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3;// asynch 输入 GPIO27 (MFDXB)(需要时)// GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3;// asynch McBSP



复

位发送器*。
pMcbspReg ->SPCR2.bit.XRST = 0;
pMcbspReg ->SPCR1.bit.RRST = 0;
//step2将采样率发生器置于复位 pMcbspR2->SPCR2.bit.GRST
= 0;
pMcbspReg =

0XM=0XM=CLKSPR=0XM=0XM=0XM=pMcKSRM=0;pMcB=CLR=0XM=0XM=CLKSPR=0XM=0XM=CLR=0M=0PbCLKSRM=0PbCLR=0PbCLR=0;pbCLR=0PbSPR=0P

非环回模式、1:环回模式
//STEP3影响 SPI 操作的程序寄存
器 pMcbspReg ->SPCR1.bit.CLKSTP = 2;//>=2 spimode

pMcbspReg ->PCR.bit.CLKXP =0;//bit1=0:在 CLKX 的上升沿对传输数据进行采样。
pMcbspReg ->pcr.bit.CLKRP =0;//bit0:0:接收数据在 MCLKR 的下降沿被采样
// pMcbspReg ->pcr.bit.CLKXM =1;//master

pMcbspReg ->xCR2.bit.XPh相= 0;// pMCRDCn 帧中只有一个阶段
=帧中只有一个阶段



1 =发送帧中只有一个字1;pMCRSPR0 = 1;pMCR0 = 1
接收帧中只有一个字= 1;pMCRDCn = 1 = 1;pMCRSPR0 = 1;pMCR0 =

1 = 1;pMCRSPR0 = 1;pMCR0 = 1 = pMCR0 = 1;pMCRSPR0 = 1;pMCR0 = pMCR0 = pMCRSPR0 = 1;pMCRCR1;pMCRn = pMCR0 = 1 = 1;pMCR0 = pMCRSPR0 = pMCR0 = 1;pMCR0 = pMC1;pMCRSPRSPR0 = 1 = pMCR0 = pMC1;pMCRSPR0 =
pMcbspReg -> SRGR2.bit.CLKSM = 1;//LSPCLK
pMcbspReg -> SRGR1.bit.CLKGDV = 0xc7;// 0x4a:clkG=(150m/4)/(4A+1)=500kHz;0x7c clkG=(150m/ 100m/

发送帧中只有一个字


100m/每位

)= 0x1m/接收帧中只有一个字每位201m/每位/r1m/每位/rmcr1m/每位/r1mspr1m/每位/r1mcr1mcr1mcr = 0xr1prmcr1mcr1mcr = 0xr1pr1m/每位/rmcr1mcr1pr1prr1prrmcrmcr1prr1prm/ mcrmcr1prrrrr1pr1prrrm/ mcr1prmcr1prmcr1pr1pr1pr1pr1




pMcbspReg ->SPCR2.bit.XRST = 1;
pMcbspReg ->SPCR2.bit.frst = 1;
clkg_delay_loop ();
}

单字节 SPI_Writebyte Byte (UByte WRI_DATA)
{

// UReadreData = 0;
McbspbRegs.DXR1.ALL = WRI_DATA;
while (McbspbRegs.SPCR1.bit.RRDY = 0){}
返回 McbspbRegs.DRR1.all;
// reData = McbspbRegs.DRR1.all;
//返回 reData;
}

#define FLASH_CS_H GPIO_Write_TE (59、1)
#define FLASH_CS_L GPIO_Write_TE (59、0)

uint16_t Is25064_Write_TE (59、SPI_ReadByte



)= 0x00;Spi_ReadByte (Spi_Read_Write_Sp_ReadTemp = 0x90_Sp_Read_ReadByte);= 0x90_Read_Spine_Spin_Read_Read_Read_Spice

(0x000_Spine_Spine_Spine_Spin_Read_Read_Read_Write_Spin
temp = SPI_WriteReadByte (0x00);

Temp|=SPI_WriteReadByte (0xFF)<<8;//制造商 ID =9dh
Temp|=SPI_WriteReadByte (0xFF);//器件 ID =16h
FLASH_CS_H;
return Temp;
}

void Is25lp064_Init (0xSPI_WriteReadByte)(0xFF);// TI_FLASH

(63 TO_FLASH (TE_GPIO_E


)、TO_FLASH (0是写保护状态,1是不保护状态)、TO_FLASH (t_TO_58、TO_FLASH、TO_TO_E、TO_E、TO_E、TOP_59 (TOP_FLASH)、TOP_FLASH、TOP_FLASH、TOP_58、TOP_LET_GPIO/ TOP_58 (TOP_58)、TOP_LET_GPIO_SET
1);//拉低可以使设备处于暂停状态,恢复会高,设备继续拉低之前的工作,set 1不暂停
FLASH_CS_H;//默认不选择
McBSP_GPIO_init ();
}

#define MCP2515_CS_H GPIO_Write_TE (27、1)
#define MCP2515_CS_L GPIO_Write_TE (27、0)



Ubyte SPI_TX[20]、SPI_RX[20];MCP2515_TE_ET_PRECT_PRECT_PRECT_0







(2)/PM2515_INTS_INTS_INTS_PRECT_PRECT_PRECT_PRECT_PRECT_0)
;// PRECT_PRECT_INTS_0
GPIO_Write_TE (50、1);//
/* MCP2515和闪存共用 mcbsp接口 由于 Flash的初始化中调用了 McBSP_GPIO_init 这里就不需要再次调用了。
*

***/
}
void SPI_WR (Ubyte len)
{
字节 I = 0;
uint32_t TIME_OUT = 0x1000;

MCP2515_CS_L;//CS 使能
对于(i=0;i 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    那么、您使用的是多从器件配置吗? MCLKX、MDX 和 MDR 连接到两个从器件? 您可以为每个信号提供独立的芯片选择信号。 请确认。

    您是否在示波器上观察到了信号? 结果如何?
    如果您只连接和访问其中一个从站、则通信是否正常?

    您的代码中没有任何内容看起来不合适。 我会检查您的硬件连接、以查看问题是否存在。

    此外、在发布代码时、请使用 RTF 编辑器中提供的代码格式化工具。 它使每个人都能更轻松地查看代码。 我已修改了您的帖子、以显示这是如何显示的。

    此致、

    3月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我使用的是多从器件配置、MCLKX、MDX 和 MDR 连接到两个从器件、每个从器件都有独立的芯片选择信号。
    我观察到 MCLKX、MDX、CS 的正确信号是示波器上的一个从器件、但 MDR 的信号始终为高电平。 我不会尝试仅连接和访问其中一个从器件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我建议一次只连接一个从设备。 如果可以的话、开始引入一个从器件并再次测试。 您还可以查看从器件、并查看 SPI 通道处于非活动状态时相应的数据输出引脚的状态。 其中一个器件实际上是在未激活期间将其驱动至高电平、而不是切换到高电平 z

    如果可能、您能否将此 McBSP 信号网络的原理图分享给您的从器件?

    -Mark
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、再说一次、

    只需检查您是否仍面临此问题。

    谢谢、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、

    我将假定您已解决问题、如果没有、请作出响应、我们可以继续进行调试。

    谢谢、
    标记