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.

f2812spi与eeprom通信问题

您好,

         自制板上使用的dsp为f2812,使用的eeprom为at25256b。现在想利用eeprom存储数据,然后现在测试dsp往eeprom读写数。但是现象很奇怪,且无法正确读数。已经做过spi的自测,使能spi自循环模式,能正确收发数。

以下图片是我的程序。

现在我的程序是,比如当我往txbuf里写0xaa时,delayloop后就会在rxbuf里收到0xaaff。好像根本接收不到eeprom发的数,数也没有正确写入。还有就是我最后会卡在eeprom状态查询的地方。无法继续。

恳请各位大神能指教!谢谢!!!

  • rxbuf收到数据说明配置模式不对       数据可能根本没写出去

  • 您好,

             谢谢您的回复!请问,那么正确的现象是怎么样的?我发现我gpio管脚的配置没有写ellow,导致片选没有真正拉低。改正过后,现在第一步写使能时,向eeprom发指令,rxbuf没有数,为0。可是当我继续写数时,给eeprom发写指令,rxbuf又出现了0xaaff这种现象。

              关于spi的配置,我选的是模式0和8bit,对照手册来的,还有哪些需要注意的呢?

             谢谢大神赐教!

  • 你好!

    我之前也调过SPI,个人感觉很有可能是你SPI的配置不对。我的建议是不要用自收自发的测试模式,拿一个示波器,4通道的。将4个探头分别挂到SPI的4个IO引脚上,然后你让程序循环发送一个数,从示波器上通过时序的波形把实际引脚上发出的数读出来,看看是否是对的。

  • 楼主,你好,我调过28335的SPI,给你几点建议:

    1.最好按照TI官方例程的步骤来配置GPIO和SPI功能,有些可能也说不上为什么,但是可以避免很多不必要的问题,

    例如你的程序里可以GPIO上拉-同步时钟-GPIO功能选择这种步骤;SPI的功能官方也是先复位再使能,如下:

    SpiaRegs.SPICCR.bit.SPISWRESET = 0; // Reset SPI
    SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Enable SPI

    2.SPI的芯片配对时钟极性很重要,按照你的程序配置CLKPOLARITY=0,CLK_PHASE=0好像不对,

    建议查一下E2PROM的DATASHEET确定好,再将DSP与之配成一样的即可。根据问题描述E2PROM没有正确写入,

    怀疑是时钟极性不对。

  • 看了下你的代码,最大的可能性是SPI极性设置那里,你仔细看下文档,之前我因为这个问题卡了很久,我看了下你的驱动,问题不大,我给你我之前的,你对照看下,下面给你我之前调试成功的代码:

  • 您好,

    感谢各位的回复!我用的eeprom是atmelat25128b,手册里说支持spi mode0和3,对应的难道不是时钟极性的00和11吗?

  • 时钟极性要去看发送和接收时的时序图,00和11FLASH芯片里是CLK空闲时是高电平还是低电平的区别,E2PROM里应该是类似意思。

  • 您好,

    我将测试了eeprom的si管脚,sclk管脚和cs管脚。

    我现在将spiccr寄存器的spichar配置为4,这样观察到片选拉低时对应的有sclk的8个上升沿。如下图。

    然后观察我写的数,8个sclk上升沿对应的数确实是0x06。

    可是我读eeprom寄存器的时候收到的是个f。

    我这样的现象能证明已发出去正确的数了吗?

    还有就是极性的配置,我的eeprom手册时序图如下。

    我实在看不懂这个图里极性是咋配的。

    恳请各位大神赐教!谢谢!

  • 先确定你SPI发出的数据是不是对的,比如你要发出0x05,用示波器看看你SPI引脚上的电平是否是对的。如果发出的数据是对的。再看接受的数据,先看SPI引脚上的电平,再看寄存器里读到的数,如果一致,那说明你SPI通了。然后在去看手册上是什么模式。

  • 建议你先用两个dsp板子联调,这样方便你调试SPI驱动是否正确;调试正确后再和eeprom调试,至于极性你四个试一遍不就知道了

  • 下降沿发送,上升沿接收 ,CLKPOLARITY=0,CLK_PHASE=1试一下。

    楼上说的对,一共就4种模式,不确定挨个试下就行。

  • 感谢各位大神的回复,我的问题主要是发数和收数的时序不对,还有就是极性配置得不对,正确的应该是01,挨个试了。