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.

利用spi向eeprom写数据的基础配置问题

Other Parts Discussed in Thread: TMS570LS0914, HALCOGEN

大家好,我最近在用spi向eeprom读写数据,mcu是tms570ls0914,eeprom是m95160,然后现在有几个问题想请教一下大家

1、向状态寄存器读写(Status Register )和内存阵列(Memory Array )读写有什么区别

2、往内存阵列里面读写的时候数据格式是  8位读\写 命令+16位地址+8位数据   请问这16位地址位该如何确定

3、我看芯片使用手册上说每次写入前都要加入写入使能命令,请问这个写入使能是加在写命令前面,还是单独写一组命令,如果加载写命令前面,那么数据格式是怎样的

  • 1. SPI Charlen应配置为8位。默认为16位。如果通过HALCOGen生成SPI驱动程序,请修改8位TX和RX的驱动程序。

    2.请启用SPI CSHOLD。EEPROM(m95x)要求芯片选择信号在几个连续的数据字传输(指令,状态等)期间保持连续有效。

    3.请为EEPROM和MCU使用相同的时钟极性。EEPROM仅支持两种模式:CPOL = 0,CPHA = 0; 或CPOL = 1,SPHA = 1

    4.读取状态和写入状态之间的差异:读取状态的指令(第1字节传输)为0000_0101b,但写入状态寄存器的指令为0000_0001b。读/写存储器的指令是0000_0011b和0000_0010b。

    5.读取存储器阵列时,首先需要发送地址[15:8],然后发送[7:0]地址。但保持CS低(CSHOLD设置为1)

    6. EEPROM要求必须在每个WRITE和WRSR指令之前设置写使能锁存(WEL)位。执行此操作的唯一方法是向设备发送写入启用指令。

    --Write ENable --> Instruction --> Address --> Data
  • 谢谢您的回复,但是我现在还有几点不太清楚还需要请教您一下
    1、我使用HAL生成的spi驱动程序,但是我不太懂怎么修改tx和rx的驱动程序,在spi.c文件中我也没找到tx和rx相关的程序
    void spiSendAndGetData(spiBASE_t *spi, spiDAT1_t *dataconfig_t, uint32 blocksize, uint16 * srcbuff, uint16 * destbuff)
    {

    /* USER CODE BEGIN (17) */
    /* USER CODE END */

    uint32 index = (spi == spiREG1) ? 0U :((spi==spiREG2) ? 1U : ((spi==spiREG3) ? 2U:((spi==spiREG4) ? 3U:4U)));

    g_spiPacket_t[index].tx_length = blocksize;
    g_spiPacket_t[index].rx_length = blocksize;
    g_spiPacket_t[index].txdata_ptr = srcbuff;
    g_spiPacket_t[index].rxdata_ptr = destbuff;
    g_spiPacket_t[index].g_spiDataFormat = *dataconfig_t;
    g_spiPacket_t[index].tx_data_status = SPI_PENDING;
    g_spiPacket_t[index].rx_data_status = SPI_PENDING;

    spi->INT0 |= 0x0300U;

    /* USER CODE BEGIN (18) */
    /* USER CODE END */
    }
    是不是这段程序里面的 blocksize
    2、cshold模式的启用我只在mibspi模式里有看到,在spi中没找到cshold模式怎么启用
    3、时钟的配置要怎么写,我在hal里面没有找到具体的配置
    4、读取、写入内存阵列时,地址怎么配置,就是地址可以随意写,还是有什么要求