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.

[参考译文] TMS320F28388D:通过 SPI 扩展 FRAM

Guru**** 2539500 points
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG, TMS320F28388D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1344772/tms320f28388d-extending-fram-through-spi

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARESysConfig

大家好!

我将使用  spi_ex6_eeprom.c 示例与外部 FRAM (MB85RS2MTY)进行通信。

我编辑了该示例、以便将10个值写入 FRAM、并尝试回读:

// Included Files
#include "driverlib.h"
//#include "device.h"
#include "board.h"


// Defines
#define FRAM_ADDR                   0x4F          
#define NUM_BYTES                   8


// SPI FRAM status
//#define MSG_STATUS_READY_M        0x0001 // FRAM is ready (not busy)
#define MSG_STATUS_WRITE_READY_M    0x0002 // FRAM
#define MSG_STATUS_BUSY             0xFFFF // FRAM is busy (internal write)


// Opcodes for the FRAM (8-bit)
#define RDSR                        0x05
#define READ                        0x03
#define WRITE                       0x02
#define WREN                        0x06
#define WRDI                        0x04
#define WRSR                        0x01


#define CS_LOW                      GPIO_writePin(CS_FRAM, 0)           
#define CS_HIGH                     GPIO_writePin(CS_FRAM, 1)           


// Function Prototypes
uint16_t readStatusRegister(uint16_t statusRegister);
void writeData(uint16_t address, uint16_t * data, uint16_t length, uint16_t txdly);
void readData(uint16_t address, uint16_t * data, uint16_t length,  uint16_t txdly);
void enableWrite(void);

#define DUMMY_DATA 0
#define NO_DELAY   0

uint16_t SPI_readByte_FRAM(uint32_t base, uint16_t address);
uint16_t SPI_read16bits_FRAM(uint32_t base, SPI_endianess endianness, uint16_t address);
uint32_t SPI_read24bits_FRAM(uint32_t base, SPI_endianess endianness, uint16_t address);
uint32_t SPI_read32bits_FRAM(uint32_t base, SPI_endianess endianness, uint16_t address);

void done(void);

uint32_t base = SPIC_BASE;                      

#define BUFFER_SIZE 10

// Main
void main(void)
{
    //uint16_t i;
    //uint16_t pass = 0;
    //uint16_t fail = 0;

    // Initialize device clock and peripherals
    Device_init();


    // Disable pin locks and enable internal pullups.
    Device_initGPIO();


    // Board initialization
    Board_init();

    uint16_t TXbuff[BUFFER_SIZE] = {1,1,1,1,1,1,1,1,1,1}; //sample data to send to flash
    //uint16_t TXbuff[BUFFER_SIZE] = {2,2,2,2,2,2,2,2,2,2}; //sample data to send to flash
    uint16_t RXbuff[BUFFER_SIZE];

    CS_HIGH;


    // Enable write on the FRAM
    enableWrite();

    // Wait until the FRAM is ready to write data
    //while((readStatusRegister(RDSR) & MSG_STATUS_WRITE_READY_M) == MSG_STATUS_WRITE_READY_M)
    while((readStatusRegister(RDSR) & MSG_STATUS_WRITE_READY_M) == 0)
    {
    }

    writeData(FRAM_ADDR, &TXbuff[0], BUFFER_SIZE, NO_DELAY);                      //Operazione di scrittura

    // Read from the FRAM
    readData(FRAM_ADDR, &RXbuff[0], BUFFER_SIZE,NO_DELAY);

}

uint16_t SPI_readByte_FRAM(uint32_t base, uint16_t address)
{
    uint16_t RXdata = 0;

    CS_LOW;

    // Send the READ opcode.
    SPI_transmitByte(base, READ);

    // Send FRAM address to write data
    SPI_transmit16Bits(base, address);

    // Receive data byte from FRAM by sending dummy byte
    RXdata = SPI_receiveByte(base, DUMMY_DATA);

    CS_HIGH;

    return(RXdata);
}

uint16_t SPI_read16bits_FRAM(uint32_t base, SPI_endianess endianness, uint16_t address)
{
    uint16_t RXdata = 0;

    CS_LOW;

    // Send the READ opcode.
    SPI_transmitByte(base, READ);

    // Send FRAM address to write data
    SPI_transmit16Bits(base, address);

    // Receive data 16-bit word from FRAM by sending two dummy bytes
    RXdata = SPI_receive16Bits(base, endianness, DUMMY_DATA, NO_DELAY);

    CS_HIGH;

    return RXdata;
}

uint32_t SPI_read24bits_FRAM(uint32_t base, SPI_endianess endianness, uint16_t address)
{
    uint32_t RXdata = 0;

    CS_LOW;

    // Send the READ opcode.
    SPI_transmitByte(base, READ);

    // Send FRAM address to write data
    SPI_transmit16Bits(base, address);

    // Receive data 24-bit word from FRAM by sending three dummy bytes
    RXdata = SPI_receive24Bits(base, endianness, DUMMY_DATA, NO_DELAY);

    CS_HIGH;

    return RXdata;
}

uint32_t SPI_read32bits_FRAM(uint32_t base, SPI_endianess endianness, uint16_t address)
{
    uint32_t RXdata = 0;

    CS_LOW;

    // Send the READ opcode.
    SPI_transmitByte(base, READ);

    // Send FRAM address to write data
    SPI_transmit16Bits(base, address);

    // Receive data 32-bit word from FRAM by sending four dummy bytes
    RXdata = SPI_receive32Bits(base, endianness, DUMMY_DATA, NO_DELAY);

    CS_HIGH;

    return RXdata;
}

// Function to send RDSR opcode and return the status of the FRAM
uint16_t readStatusRegister(uint16_t statusRegister)
{
    uint16_t temp;
    //uint32_t base = SPIA_BASE;
    uint32_t base = SPIC_BASE;

    // Pull chip select low.
    CS_LOW;

    // Send RDSR opcode
    SPI_transmitByte(base, statusRegister);

    // Send dummy data to read status register.
    temp = SPI_receiveByte(base, 0x0);

    // Pull chip select high.
    CS_HIGH;

    // Read the status from the receive buffer
    return(temp);
}


// Function to send the WREN opcode
void enableWrite(void)
{
    //uint32_t base = SPIA_BASE;
    uint32_t base = SPIC_BASE;
    // Pull chip select low.
    CS_LOW;

    // Send the WREN opcode.
    SPI_transmitByte(base, WREN);

    // Pull chip select high.
    CS_HIGH;
}

// Function to write data to the FRAM
// - address is the byte address of the FRAM
// - data is a pointer to an array of data being sent
// - length is the number of characters in the array to send
void writeData(uint16_t address, uint16_t *data, uint16_t length, uint16_t txdly)
{
    //uint32_t base = SPIA_BASE;
    uint32_t base = SPIC_BASE;

    // Pull chip select low.
    CS_LOW;                                     //in modo da dare al Chip Select lo stato attivo

    // Send the WRITE opcode.
    SPI_transmitByte(base, WRITE);

    // Send FRAM address to write data
    //SPI_transmit16Bits(base, address);
    SPI_transmit24Bits(base, address, NO_DELAY);

    // Send data to be programmed
    SPI_transmitNBytes(base, data, length, txdly);

    // Pull chip select high.
    CS_HIGH;                                    //in modo da dare al Chip Select lo stato standby
}

// Function to read data from the FRAM
// - address is the byte address of the FRAM
// - data is a pointer to an array of data being received
// - length is the number of characters in the array to receive
void readData(uint16_t address, uint16_t *data, uint16_t length, uint16_t txdly)
{
    //uint32_t base = SPIA_BASE;
    uint32_t base = SPIC_BASE;

    CS_LOW;

    // Send the READ opcode.
    SPI_transmitByte(base, READ);

    // Send FRAM address to write data
    //SPI_transmit16Bits(base, address);
    SPI_transmit24Bits(base, address, NO_DELAY);

    // Receive length number of bytes
    SPI_receiveNBytes(base, data, length, txdly);


    CS_HIGH;
}

// End of File


从读取缓冲区来看、似乎所有字都正确写入/读取、但如果我将值更改为写入、在重新编程后、我看不到正确的值(读取的值都是0)、就像以前一样。

情况1: 首次刷新(uint16_t TXbuffle[buffer_size]={2、2、2、2、2、2、2、2};):

情况2:  第二次 刷写、地址相同(uint16_t TXbuffer_size]={1、1、1、1、1、1、1、1、1、1};)

问题可能是什么?

谢谢。此致。

詹尼

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

    大家好、Gianni、

    您需要回答几个问题:

    • 您是否也在仔细研究 SPI 线路? 您是否在所有行上看到了正确的行为?
    • 另外、为了澄清、仅当您看到 RXbuff 接收全部为0时、您的问题才会在第二次运行时出现。
    • 您还可以澄清以下陈述:  
    Unknown 说:
    我更改值以写入

    只是想了解您是否在说您只写入 SPI 数据而不读取? 在我看来、您究竟在什么地方以及何时发生了变化、这一点并不清楚。  

    此致、

    艾里森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否也在研究 SPI 行? 是否在所有行上看到正确的行为?

    是的、"SI"的范围 对于这两种情况始终是正确的。 "SO"的范围仅在第一次 运行时正确(Case1、我正确地看到 RXbuff)、第二次运行时"SO"的范围始终为高(CASE2、我没有正确地看到 RXbuff)。

    并为了澄清,您的问题仅在第二次运行时看到 RXbuff 全部收到0?

    确切地说、在 CASE2中  、我更改了 TXbuff 值、并且在重新刷写和调试后、我看到 RXbuff 接收所有的0。

    您还可以澄清以下陈述:
     

    将值更改为写入、意思是代码始终相同(TXbuff 数组除外)。


    此致、

    詹尼

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

    大家好、Gianni、

    是的,"SI"的范围 对于这两种情况总是正确的。 "SO"的范围仅在第一次 运行时是正确的(Case1,我正确地看到了 RXbuff),第二次运行时"SO"始终为高(Case2,我没有正确地看到 RXbuff)。

    由于 F2838x 是控制器、这告诉我从 F2838x 传输到 FRAM 的数据始终正确。 问题在于接收回数据(从 FRAM 读取数据)、是否正确? 在单步执行/进入代码时、您能帮助确定 您看到 RXbuff 首次使用正确的数据填充代码中的哪一行吗?  

    请给我留出一天时间来看看您的项目。 感谢您的耐心!

    此致、

    艾里森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题在于接收回数据(从 FRAM 读取数据),是否正确? [/报价]

    完全正确。

    您逐步浏览/进入代码时,您能帮助确定您 看到 RXbuff 首次用正确的数据填充代码中的哪一行吗?  [/报价]

    我看到 RXbuff 在此行后的第一次填充正确的数据: ReadData (FRAM_ADDR、&RXbuff[0]、buffer_size、no_delay);

    谢谢。此致。

    詹尼

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

    大家好、Gianni、

    是否可以在 ReadData ()行设置一个断点,然后使用"Step Into"按钮和"Step Over"按钮来浏览 ReadData ()中的函数以及 ReadData ()中的函数,例如 SPI_translingNonFIFOTransaction ()、SPI_FIF24bits ()/ SPI_pollingFIFOTransaction ()和 SPI_ReceivePollingTransaction()中的函数? 如果您在观察缓冲区、SPI RXEMU 和/或范围行的同时执行此操作、您是否看到预期的行为/数据?

    当你调用 ReadData()中的 spi_receiveNBytes()函数时,应该专门填充 RXbuff。 SPI_receiveNBytes()使用 spi.c 中定义的 SPI_pollingFIFOTransaction ()。 在该函数内进行单步执行时、您是否看到预期的行为/数据或出现任何错误?

    如果我理解了您之前的评论、您在第一次和第二次运行之间的唯一变化是 TXbuff 值从1变为2? 或者您是否要更改发送到 FRAM 的操作码?

    从我的第一遍演示代码开始、似乎一切都正常。 我不熟悉 FRAM 器件功能、 但是、如果您要更改发送给 FRAM 的内容、 也许 这会影响以错误方式传回的内容、那么请告诉我您对此的看法、以及您是否能够像我所说的那样逐步讲解您的代码。  

    此致、

    艾里森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否在该 ReadData()行设置一个断点,然后使用"Step Into"按钮,再使用"Step Over"按钮来浏览 ReadData()中的函数以及 ReadData()中的函数,例如 SPI_PollingNonFIFOSPI(),SPI_PassingTransaction_ReceivingTransaction()和 FIFOSPI_PasseTransaction()中的函数? 如果您在观察缓冲区、SPI RXEMU 和/或范围行时执行此操作、您是否看到预期的行为/数据?

    我尝试使用这种方法,但如果我在 ReadData ()中点击"Step Into",我无法 观察 RXbuff 的值(我看到  每个函数的"identifier not found"):

    SPI_TRANSPCByte (base、Read);

    SPI_TRANSDR24Bits (base、address、no_delay);

    SPI_receiveNBytes (base、data、length、txdly);

    当您调用 ReadData()中的 SPI_receiveNBytes()函数时,应专门填写 RXbuff。 SPI_receiveNBytes()使用 spi.c 中定义的 SPI_pollingFIFOTransaction ()。 在该函数内进行单步执行时、您是否看到预期的行为/数据或出现任何错误?

    在 Case1 (first run),通过点击  spi_receiveNBytes()上的"Step over"将用正确的值填充 RXbuff。

    在 CASE2(第二次运行),通过点击 SPI_receiveNBytes()上的"Step over"会填充 RXbuff 但使用不正确的值。

    如果我理解了您之前的评论,您在第一次和第二次运行之间的唯一变化是 TXbuff 值从1变为2? 还是要更改发送到 FRAM 的操作码?

    确切地说、我将仅将 TXbuff 值从1更改为2、地址"FRAM_ADDR"始终相同。

    如果您正在更改发送至 FRAM 的内容, 可能是 因为这会以错误的方式传回内容,请让我了解您对此的看法,如果您能够按照我所提到的方法逐步执行您的代码,请告诉我。  [/报价]

    我尝试了另一个案例、其中第一次运行的 TXbuff 为{2、2、2、2、2、2、2 、2、2}、而在第二次运行中为{2、2、1、2、2、2、2、2}、结果如下:

    TXbuffer {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}---  > RXbuffer {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}-----   >正确的值。

    TXbuffer {2,2,2,2,1,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}---  > RXbuffer {2,2,2,2,0,2,2,,0,2,2,2,2,2,2,2}-----   >值不正确。

    因此、在第二个运行中、您可以看到、我在 TXbuff 时更改的值在 RXbuff 中变为0 (它们应该为1)。

    感谢您的关注和支持、

    詹尼

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

    大家好、Gianni、

    Allison 目前不在办公室。 你可以期待她的回应周一4/8。 对给您带来的不便、我们深表歉意。

    此致、

    德拉尼

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

    大家好、Gianni、

    我尝试使用此方法,但如果我在 ReadData 中单击"Step Into" ,我无法观察 RXbuff 的值(我看到  每个函数的"identifier not found"):

    如果发生这种情况、您应该能够使用弹出的"locate file"按钮并导航到器件的 driverlib 文件夹、让 CCS 能够找到并将其上拉。 或者、 如果您愿意、也可以转到 C2000Ware 文件夹下的{C2000Ware}\driverlib\f2838x\driverlib\spi.c 或 spi.h、搜索并准确查看这些函数中发生的情况。

    我尝试了另一个案例、其中第一次运行的 TXbuff 为{2、2、2、2、2、2、2 、2、2}、而在第二次运行中为{2、2、1、2、2、2、2、2}、结果如下:

    TXbuffer {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}---  > RXbuffer {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}-----   >正确的值。

    TXbuffer {2,2,2,2,1,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}---  > RXbuffer {2,2,2,2,0,2,2,,0,2,2,2,2,2,2,2}-----   >值不正确。

    [/报价]

    根据您运行的其他试验、通信错误可能是由于第一次运行时的配置不正确引起的。 请允许我再多花一天时间来更深入地研究一下这个问题。 感谢您的耐心!

    此致、

    艾里森

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

    大家好、Gianni、

    只需告诉您、我目前在这方面还没有取得太多具体进展、但我还要与另一位同事联系、让您了解我们的发现。 如果您在同一时间内有任何其他测试/结论、请随时更新。  

    此致、

    艾里森

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

    大家好、Gianni、

    感谢您的耐心等待。 您使用的是哪个 C2000Ware 版本? 一般代码看起来不错、但最近特定的 SPI DriverLib 函数中存在一个错误(错误是 在某些函数中重新配置了字符长度、 并且 在 SPI 初始化之外重新配置字符长度会 在出现实际 SPI 时钟脉冲之前导致 SPICLK 中出现小的毛刺脉冲)。 此错误 行为 可能会 破坏 SPI 通信。  幸运的是、此问题 已在最新版本的 C2000Ware 中修复、因此请确保下载版本5.02.00.00 (https://www.ti.com/tool/download/C2000WARE/5.02.00.00)并 检查您的工程/代码是否使用此较新版本的 DriverLib。 如果你有任何问题,请告诉我!

    此致、

    艾里森

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

    我使用的是"C2000Ware_5_01_00_00"。

    请确保下载版本5.02.00.00 (https://www.ti.com/tool/download/C2000WARE/5.02.00.00)并 检查您的项目/代码是否使用此较新版本的 DriverLib。 如果您有任何问题,请告诉我!

    现在我安装了最后一个版本的"C2000Ware_5_02_00_00"、我管理工程/代码以使用更新版本的 DriverLib。

    Re 运行代码时、问题仍然存在。

    感谢您的支持。

    此致、

    詹尼

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

    大家好、Gianni、

    感谢您的答复。 我想了解的另一件事是您是否可以尝试在 TXbuff 中传输2和1以外的数字。 例如、您能尝试一下3和4吗? 数字、比如10和11、会怎么样? 希望了解这是否揭示了有关该行为的更多信息。  

    您是否还可以考察所有4条 SPI 线路并显示所有这些线路的传输、以便我们再次检查所有这些线路的行为是否符合预期?

    此致、

    艾里森

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

    您好 Allison:

    我习惯了写入不同的数字、我注意到使用不同的数字(例如10个或更多) RXbuff 在第一次运行时接收全为0。

    我正在使用函数 "SPI_TRANSD24Bits ()"来发送 FRAM 地址到写入数据、因为16位+ 6位(无效位)。
    如果我用"SPI_transl16Bits () "而不是"SPI_transl24Bits ()",我看到阵列 RXbuff 的第一个元素等于255 ,把 SPI_transl24Bits ()放在右位置是否正确?

    由 FRAM 数据表提供: 读取命令读取 FRAM 存储器单元阵列数据。 将任意16位地址和读取操作码输入到 SI。 6位高地址位无效。 然后、8周期时钟输入到 SCK。 输出与 SCK 的下降沿同步。

    此致、

    詹尼

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

    大家好、Gianni、

    SPI_TRANSDR16bits 函数使用了一个从 SPI 写入16位的非 FIFO 方法(在一次传输中)、而 SPI_TRANSDR24bits 使用 FIFO (在16位和6位的技术2单独传输中)。 这是因为 C2000 SPI 模块针对16位事务进行了优化、因此、如果您想传输16个以上的数据、就需要在 FIFO 中使用多个级别(或在非 FIFO 中使用多个级别)。

    您使用的 FRAM 的器件型号是多少? 我想知道 FRAM 不期望使用的某些格式会导致这种情况。 您确认这里使用了正确的时钟模式、对吧? FRAM 器件在时钟相位和极性方面的预期是什么?  

    您是否能够共享4条线路的示波器/分析仪图像? 这也有助于我们将其可视化。

    此致、

    艾里森

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

    您好、对不起响应出现延迟。

    您使用的 FRAM 的设备号是什么? 我想知道 FRAM 不期望使用的某些格式会导致这种情况。 您确认这里使用了正确的时钟模式、对吧? FRAM 器件在时钟相位和极性方面的预期是什么?

    我正在使用 FRAM  MB85RS2MTY、它对应于 SPI 模式0 (CPOL   0、CPHA 0 )和 SPI 模式3 (CPOL   1、CPHA 1 )。

    在 SysConfig 中、我 在模式0、极性0、阶段0中设置了"传输协议"、并禁用 FIFO 使用。

    您是否能够分享4条线路的示波器/分析仪图像? 这也有助于我们将其可视化。

    以下是第二次运行时错误传输的示例:

    写入:

    阅读:

    传输正常、因为 SI 信号中存在数据。

    所以,总之,问题似乎是在 ReadData 中,但我不理解原因。

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

    大家好、Gianni、

    请注意、不同的制造商对 SPI 时钟模式的定义不同。 情况如下:

    • MB85RS2MTY SPI 模式0 = F2838x 模式1 (有延迟的上升沿;POL = 0、PHS = 1)
      • 时钟线为空闲低电平;数据在时钟的上升沿接收/锁存、并在下降沿发送。
    • MB85RS2MTY SPI 模式3 = F2838x 模式2 (无延迟的下降沿;POL = 1、PHS = 0)
      • 时钟线处于高电平空闲状态;数据 在时钟的上升 沿接收/锁存、并在下降沿发送。

    从 MB85RS2MTY:

    通过 F2838x:

    通过使用等效的时钟方案、请确保对两个器件的期望格式相同。

    此致、

    艾里森

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

    尊敬的 Allison:

    感谢您的 关注。 现在我设置了"F2838x 模式1"、但未做任何更改、问题仍然存在。

     

     

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

    大家好、Gianni、

    我知道您在前面提到过、由于某些6位无效、您选择将地址作为24位发送-您能解释一下您为什么选择这样做以及它的上下文吗? 当您只发送16位时、行为是否仍以与之前相同的方式发生变化?

    此致、

    艾里森

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

    您好 Allison:  

    问题已修复、代码已正确。 我试用了   TMS320F28388D controlCARD 的示例、它工作正常。

    此时、问题是由于 定制板中存在 WP 写入保护引脚连接不正确导致的。

    非常感谢大家的支持。

    此致、

    Gianni。

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

    大家好、Gianni、

    很高兴听到问题得到解决! 始终乐意提供支持-如果遇到其他问题、请随时打开另一个主题

    此致、

    艾里森