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.

[参考译文] TMDSLCDK6748:SPI 0通信

Guru**** 2609895 points
Other Parts Discussed in Thread: TMDSLCDK6748, TMS320C6748, OMAP-L138

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/653205/tmdslcdk6748-spi-0-communication

器件型号:TMDSLCDK6748
主题中讨论的其他器件: TMS320C6748OMAP-L138

我使用  的是 TMDSLCDK6748 评估板。 我想使用 SPI0通信配置电路板中的 SPI 通信。 但是、J15中只有 SPI0_SIMO、SPI0_SOMI 和 SPI0_SCLK 引脚可用、任何输出跳线都没有芯片选择引脚输出。 它们似乎连接到 LAN IC、 U23、LAN8710A-EZK。  SPI1通信可用、似乎已连接到摄像头接头。  

请建议一种在电路板中使用 SPI 通信的方法。

 

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

    您好!

    SPI0_ENSn/EPWM0_B/MII_RXDV;SPI0_SCSn_5/UART0_RXD/MII_RXD3和 SPI0_SCSn_4/UART0_TXD/MII_RXD2在扩展头上可用。

    您需要正确地引脚排列 TMS320C6748器件的 C17、C19和 D18焊球:

    然后、请参阅原理图的第11页:
     

    您需要组装 R214至 R219以将器件焊球物理连接到扩展接头。 之后、您可以使用 J15.P21、J15.P23、J15.P25、J15.P27、J15.P29、 用于 SPI 通信的 J15.P31。  


    此致、
    Yordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有可用于连接摄像头插头 J16的引脚接头?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    摄像头接口为 J16。 请参阅原理图。 引脚接头与 J16连接意味着什么?

    此致、
    Yordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TI 是否为36引脚 J16插头提供任何连接器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们是否需要移除 R177、R178、R179和 R184以避免错误?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不可以、TI 不提供连接器、您应该研究并选择正确的摄像头模块。
    电阻器不应导致任何问题。 请注意、您应该按照电路原理图中所述、使用0欧姆电阻器组装 R214至 R219。

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

    我已填充电阻器、但这些引脚中的输出信号会失真。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否布置示波器测量值? 是否确定正确执行了引脚多路复用?

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

    SPI 时钟

    SPI SOMI

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、PINMUX 已正确完成
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这样做的原因有很多:焊接不良、测量不正确(GND 不好)、如果未禁用所有以太网驱动器和引脚多路复用等、则会干扰 eth 信号。
    这实际上会影响 SPI 通信吗? 如果不是、那么您应该可以。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    即使 SPI_CLK 处于偏移(不在该引脚上提供信号)、我也会获得2V 信号@ 24MHz 频率作为该引脚的输出。 原因可能是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan Kovachev 您好、

    我在 SPI0通信中遇到更多错误。 SPI0_SIMO 和 SPI0_SOMI 正在工作(噪声很小)。 现在、这两个引脚不提供可见的输出信号。 其输出电压仅为几毫伏。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PHY 似乎未完全禁用(可能您尚未从内核中完全删除驱动程序)、并且可能会导致干扰。 确切地说、是否可以移除 R177、R178、R179和 R184并再次进行测试?

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

    Yordan Kovachev 您好、
    感谢您的帮助、

    编码是使用 TI 提供的 Starterware 完成的。 针对我的应用修改了代码"SPI_C674x_C6748_lcdkC6748"。
    如何使用程序完全禁用 PHY?


    #include 
    #include "SoC_C6748.h"
    #include "HW_PSC_C6748.h"
    #include "lcdkC6748.h"
    #include "UART.h"
    #include "SPI.h"
    
    #include "interrupt.h"
    #include "uartStdio.h"
    
    /*********
    ** 内部宏定义
    //*
    将 SMIO、SOMI、CLK 和 CS 引脚配置为功能引脚的值*/
    #define SIMO_SOMI_CLK 0x00000E00
    #define char_length 0x08
    
    /*********
    ** 内部函数原型
    /
    static void SPIConfigDataFmtReg (unsigned int dataFormat);
    static void SpiTransfer (void);
    static void SetUpInt (void);
    static void SetUpSPI (void);
    static void testCommand (void);
    void SPIisr (void);
    
    /*********
    ** 内部变量定义
    /
    volatile unsigned int flag = 1;
    unsigned int TX_len;
    unsigned int Rx_len;
    unsigned char vrf_data[260];
    unsigned char TX_DATA[260];
    volatile unsigned char Rx_data[260];
    unsigned char * p_TX;
    volatile unsigned char * p_Rx;
    volatile unsigned char StatusResponseMessage[16];
    
    /
    ** 内部功能定义
    /
    int main (void)
    {
    /*峰化 SPI0实例。 *
    PSCModuleControl (SOC_PSC_0_regs、HW_PSC_SPI0、PSC_POWERDOMAIN_AYST_ON、PSC_MDCTL_NEW_ENABLE);
    
    /*执行 SPI0的引脚复用。 *
    SPIPinMuxSetup (0);
    
    /*启用 SPI0中断的使用。 *
    SetUpInt();
    
    /*配置和启用 SPI0实例。 *
    SetUpSPI();
    
    while (1)
    {
    testCommand();
    }
    }
    
    static void testCommand (void)
    {
    int i;
    for (i=0;i<7;i++)
    TX_DATA[i]=0x55;
    
    TX_len = 7;
    RX_len = 7;
    
    SPIDat1SOC (SOC_SPI_0_regs、 (SPI_CSHOLD | SPI_DATA_FORMAT0)、0x4);
    SpiTransfer();
    }//**
    
    
    将 ARM 中断控制器配置为生成 SPI 中断
    **
    */
    static void SetUpInt(void)
    {//
    设置 ARM 或 DSP 中断控制器
    
    #ifdef _TMS320C6x
    //初始化 DSP 中断控制器
    IntDSPINTTCInit();
    
    //在矢量表
    中注册 ISR IntRegister (C674x_MASK_INT4,SPIIsr);
    
    //将系统中断映射到 DSP 可屏蔽中断
    IntEventMap (C674x_MASK_INT4、SYS_INT_SPI0_INT);
    
    //启用 DSP 可屏蔽中断
    IntEnable (C674x_MASK_INT4);
    
    //全局
    启用 DSP 中断 IntGlobal();
    #else
    /*初始化 ARM 中断控制器。*/
    IntAINTCInit();
    
    /*在中断矢量表中注册 ISR。*/
    内部寄存器(SYS_INT_SPINT1、SPIIsr);
    
    /*为系统中断56设置 AINTC 的通道编号2。
    *通道2被映射到 ARM9的 IRQ 中断。
    *
    IntChannelSet (SYS_INT_SPINT1、2);
    
    /*为 AINTC 启用系统中断。*/
    IntSystemEnable (SYS_INT_SPINT1);
    
    /*在 CPSR 中启用 IRQ。*/
    IntMasterIRQEnable();
    
    /*在 AINTC 的 GER 中启用中断。*/
    IntGlobalEnable();
    
    /*在 AINTC 的 HIER 中启用中断。*/
    IntIRQEnable();
    #endif
    }
    
    /*
    **配置 SPI 控制器
    **
    */
    static void SetUpSPI (void)
    {
    unsigned char cs = 0x04;
    unsigned char dcs = 0x04;
    unsigned int val = SIMO_SOMI_CLK;
    SPIReset (SOC_SPI_0_regs);
    
    SPIOutOfReset (SOC_SPI_0_regs);
    
    SPIModeConfigure (SOC_SPI_0_regs、SPI_MASTER_MODE);
    
    //SPIClkConfigure (SOC_SPI_0_regs、150000000、20000000、SPI_DATA_FORMAT0);
    SPIClkConfigure (SOC_SPI_0_regs、150000000、1000000、SPI_DATA_FORMAT0);
    
    SPIPinControl (SOC_SPI_0_regs、0、0、&val);
    
    SPIDefaultCSSet (SOC_SPI_0_regs、dcs);
    
    /*配置 SPI 数据格式寄存器*/
    SPIConfigDataFmtReg (SPI_DATA_FORMAT0);
    
    /*选择要使用的 SPI 数据格式寄存器并设置 CSHOLD
    *将 CS 引脚置为有效(LINE)
    *
    SPIDat1Config (SOC_SPI_0_regs、(SPI_CSHOLD | SPI_DATA_FORMAT0)、cs);
    
    /*将中断映射到中断线路 INT1 */
    SPIIntLevelSet (SOC_SPI_0_regs、SPI_RECV_INTLVL | SPI_Transmit _INTLVL);
    
    /*启用 SPI 通信*/
    SPIEnable (SOC_SPI_0_regs);
    }
    //
    ***配置 SPI 的数据格式寄存器
    **
    *
    静态空 SPIConfigDataFmtReg (unsigned int dataFormat)
    {
    /*配置 SPI 时钟的极性和相位*/
    /*
    SPIConfigClkFormat (SOC_SPI_0_regs、
    (SPI_CLK_POL_HIGH | SPI_CLK_INPHASE)、
    数据格式);
    *
    SPIConfigClkFormat (SOC_SPI_0_regs、
    (SPI_CLK_POL_LOW | SPI_CLK_INPHASE)、
    数据格式);
    
    /*将 SPI 配置为在数据传输期间首先发送 MSB 位*/
    SPIShiftMsbFirst (SOC_SPI_0_regs、dataFormat);
    
    /*设置字符长度*/
    SPICharLengthSet (SOC_SPI_0_regs、char_length、dataFormat);
    }
    
    //
    ***启用 SPI 发送和接收中断。
    **断言芯片选择线路。
    */
    静态 void SpiTransfer (void)
    {
    P_TX =&TX_DATA[0];
    P_Rx =&Rx_DATA[0];
    SPIIntEnable (SOC_SPI_0_regs、(SPI_RECV_INT | SPI_Transmit _INT);
    while (flag);
    FLAG = 1;
    /*断言 CS 引脚(LINE)*/
    SPIDat1Config (SOC_SPI_0_regs、SPI_DATA_FORMAT0、0x4);
    }
    
    /*
    **数据传输和接收 SPIIsr
    **
    */
    void SPIIsr (void)
    {
    unsigned int 代码= 0;
    
    #ifdef _TMS320C6x
    IntEventClear (SYS_INT_SPI1_INT);
    #else
    IntSystemStatusClear (56);
    #endif
    
    intCode = SPIInterruptVectorGet (SOC_SPI_0_regs);
    
    while (intCode)
    {
    if (intCode = SPI_TX_BUF_EMPTY)
    {
    TX_LEN --;
    SPITransmitData1 (SOC_SPI_0_regs、* p_tx);
    P_TX++;
    如果(!TX_Len)
    {
    SPIIntDisable (SOC_SPI_0_regs、SPI_Transmit _INT);
    }
    }
    
    if (intCode = SPI_RECV_FULL)
    {
    RX_LEN --;
    *p_rx =(char) SPIDataReceive (SOC_SPI_0_regs);
    P_RX++;
    如果(!rx_len)
    {
    标志= 0;
    SPIIntDisable (SOC_SPI_0_regs、SPI_RECV_INT);
    }
    }
    
    intCode = SPIInterruptVectorGet (SOC_SPI_0_REGS);
    }
    }
    
    /********* 文件结尾 /
    

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

    [引用]如何使用程序完全禁用 PHY?

    抱歉、我为 OMAP-L138注册了 C6758 + ARM。 好的、那么您能否尝试移除电阻器。 SPI_CLK 连接到 phy 的 RXCLK、该 RXCLK 会不断输出、正如我在数据表中看到的:
    "RXCLK 是 MII 总线的25MHz 输出时钟。 它从接收到的数据中恢复、为 RXD 总线计时。 如果没有接收到信号、则从系统参考时钟(XTAL1/CLKIN)中获取。"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yordan Kovachev 您好、

    感谢您的回复、

    是否有可用于禁用 PHY 芯片的寄存器或硬件引脚?  除了拆卸电阻器之外,还有其他解决方案吗?

    SPI0的 SIMO 和 SOMI 引脚中出现错误的原因可能是什么。 我正确获取了信号(如果有少量噪声)。 但现在这些引脚没有可见的输出。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用]是否有任何寄存器或硬件引脚可用于禁用 PHY 芯片? 除了移除电阻器之外还有其他解决方案吗?
    不可以、这取决于您的应用、因为您运行的是 RTOS。 如果您尚未启用 phy、则它不可用。 但是、正如我告诉过的、时钟是恒定的、因此您需要卸下串联电阻器。

    [引用] SPI0的 SIMO 和 SOMI 引脚出现错误的原因可能是什么。 我正确获取了信号(如果有少量噪声)。 但现在这些引脚没有可见的输出。[/quot]
    我不能说、我不知道您对电路板做了什么。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #include "gpio.h"
    #include "psc.h"
    #include "SoC_C6748.h"
    #include "lcdkC6748.h"
    #include "hw_types.h"
    #include "HW_syscfg0_C6748.h"
    
    #define PINMUX3_GPIO8_5_ENABLE (SYSCFG_PINX3_8)<_MUX3_12_PINX3_INMU12_PINX3_GPIO5_PINX3_0_GPIO5_INMUX3_GPIO12_PINX3_GPIO5_INMUX3_PINX
    SYSCFG_PINMUX3_PINMUX3_15_12_SHIFT)
    void simopinsetup ();
    
    int main (void)
    {
    somipinsetup();
    GPIODirModeSet (SOC_GPIO_0_regs、134、GPIO_DIR_OUTPUT);
    
    while (1)
    {
    GPIOPinWrite (SOC_GPIO_0_regs、134、GPIO_PIN_HIGH);
    Delay (100000);
    GPIOPinWrite (SOC_GPIO_0_regs、 134、GPIO_PIN_LOW);
    延迟(100000);
    
    }
    }
    
    void somipinsetup()
    {
    unsigned int savePinmux = 0;
    savePinmux =(HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (3))和
    ~(SYSCFG_PINMUX3_PINMUX3_11_8));
    HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (3)=
    (PINMUX3_GPIO8_6_ENABLE | savePinmux);
    }
    

    在此代码中、我将 SIMO 引脚复用到 GPIO 引脚。 我将获得毫伏范围的输出。

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

    我在 SPI0引脚上遇到了相同的问题。 我想使用 SPI0、如果可能、也使用 LAN 芯片。 我需要使用 SPI 仅对 LCD 进行写入(无需对 SPI LCD 进行读取)。


    我想知道当我想写入 LCD 时是否可以将 TX_EN 置为低电平? LAN 控制器查看 TX_EN 上升沿以发送数据。 如果我将其保持在低电平、我是否可以将数据发送到 LCD (SPI LCD)而不会与来自 LAN 控制器的数据发生混淆?

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

    您好、aronii、

    如原理图所示、SPI0_CLK 与 PHY 芯片的 RX_CLK 进行多路复用。 RX_CLK 是 PHY 芯片的输出、运行频率为25MHz。  

    因此、如果我们在不移除电阻器 R178的情况下组装电阻器 R214至 R219、25MHz 时钟将在引脚 J15_25处作为偏移输出提供。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正确。 我在上一篇文章中确认了这一点:
    "但是、正如我告诉过的、时钟是恒定的、因此您需要卸载串联电阻器"

    此致、
    Yordan