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.

[参考译文] TMS320F28335:SPI 不能与 MT25QL128ABA NOR 闪存配合使用

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1046202/tms320f28335-spi-not-working-with-mt25ql128aba-nor-flash

器件型号:TMS320F28335

你(们)好。

我的 SPI 代码可与 MCP3202 (Microchip ADC)完美配合使用、但它不能与 MT25Q 和闪存配合使用。

原理图如下所示:

下面是代码:

void SPI_init(){
  EALLOW;
   GpioCtrlRegs.GPAMUX1.bit.GPIO8=0;// GPIO8
   GpioCtrlRegs.GPADIR.bit.GPIO8=1;//方向被输出
   GpioDataRegs.GPASET.bit.GPIO8 = 1;//输出= 1
   GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;// GPIO19
   GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;//方向被输出
   GpioDataRegs.GPASET.bit.GPIO19 = 1;//输出= 1
   EDIS;

   SpiaRegs.SPICCR.bit.SPISWRESET = 0;// SW 复位
   SpiaRegs.SPICCR.bit.SPICHAR = 7;// 8位字
   SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;//上升沿
   SpiaRegs.SPICCR.bit.SPILBK = 0;//禁用回路

   SpiaRegs.SPISTS.ALL = 0xFF;//清除 INT 位

   SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;// DSP 是主设备
   SpiaRegs.SPICTL.bit.CLK_PHASE = 0;//上升沿无延迟
   SpiaRegs.SPICTL.bit.TALK = 1;//启用 TX
   SpiaRegs.SPICTL.bit.SPIINTENA=0;//禁用中断
   SpiaRegs.SPICTL.bit.OVERRUNINTENA=0;//禁用运行时的 int

   SpiaRegs.SPIBRR = 127;// LSPCLK /(SPIBRR + 1)= 120/(127 + 1)=大约1MHz

   SpiaRegs.SPIFFTX.bit.SPIRST = 0;//复位 TX 和 Rx
   SpiaRegs.SPIFFTX.bit.SPIFFENA=1;//启用 FIFO 增强型运算
   SpiaRegs.SPIFFTX.bit.TXFIFO = 0;//将 FIFO PTR 重置为零
   SpiaRegs.SPIFFTX.bit.TXFFIENA=0;//禁用 TX FIFO 中断

   SpiaRegs.SPIFFRX.bit.RXFIFORESET = 0;//复位 FIFO
   SpiaRegs.SPIFFRX.bit.RXFFIENA=1;//启用 RX FIFO 中断
   SpiaRegs.SPICTL.bit.SPIINTENA=1;//启用生成中断
   SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1;//停止复位 FIFO

   SpiaRegs.SPIFFCT.all = 10;// 2个字之间的10位延迟

   SpiaRegs.SPIPRI.bit.FREE = 0;
   SpiaRegs.SPIPRI.bit.Soft = 0;//在仿真上停止

   SpiaRegs.SPIFFTX.bit.SPIRST = 1;//启用 TX 和 Rx
   SpiaRegs.SPIFFTX.bit.TXFIFO = 1;//启用 FIFO 操作
   SpiaRegs.SPICCR.bit.SPISWRESET = 1;//停止 SW 复位

int read_ps_voltage (void){
   uint16 i、send[3]、recv[3]、volt;
   GpioDataRegs.GPACLEAR.bit.GPIO8=1;//对于 MSP3202、CS 设置为0
   SEND[0]= 0x0100;
   SEND[1]= 0xA000;
   SEND[2]= 0x0000;

   对于(i = 0;i < 3;i++){
      SpiaRegs.SPITXBUF =发送[i];
      while (SpiaRegs.SPIFFRX.bit.RXFFST!= 1);
      recv[i]= SpiaRegs.SPIRXBUF;
   

   VOLT =(recv[1]<< 8)& 0x0F00;
   伏特=伏特| recv[2];
   GpioDataRegs.GPASET.bit.GPIO8=1;//对于 MSP3202、CS 设置为1

   返回电压;

int read_flash_id (){
   uint16 i、send[2]、recv[2];
   GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;//对于 MT25Q、CS 设置为0
   SEND[0]= 0x9E00;
   SEND[1]= 0x0000;

   对于(i = 0;i < 2;i++){
      SpiaRegs.SPITXBUF =发送[i];
      while (SpiaRegs.SPIFFRX.bit.RXFFST!= 1);
      recv[i]= SpiaRegs.SPIRXBUF;
   

   GpioDataRegs.GPASET.bit.GPIO19 = 1;//对于 MT25Q、CS 设置为1
   返回 recv[1];

uint16 ps_volt = 0;
uint16 flash_id = 0;

void main(){
   /*在此处输入一些信息*/
   spi_init();
   PS_VOLT = READ_PS_VOLTAGE ();//从 mcp3202读取
   flash_id = read_flash_id ();//从 mt25q 读取
   /*执行其他操作... *

此外、我探测了 MT25Q 引脚上的所有4个信号(CS*、CLK、DQ0、DQ1)、除了 DQ1 (连接到 C2000 MISO)没有任何信号输出(预期会得到一个 ID 字节- 20h)外、所有信号看起来都很正常、 我 一直为该引脚获取低电平信号。

随附 MT25Q 数据表。

e2e.ti.com/.../mt25q_5F00_qlhs_5F00_l_5F00_128_5F00_aba_5F00_0.pdf

请提供建议。

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

    您好!

    这两个器件是否期望相同的 SPI 配置、例如时钟速率、极性、相位等?

    此外、您是否曾尝试    在未 连接其他器件的情况下独立与 MT25Q 通信?

    此致、

    Veena

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

    感谢您的建议! 我错过了相位设置。