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.

[参考译文] TM4C129ENCPDT:闪存的四路 SPI 接口问题(s70fl01gs)

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/600977/tm4c129encpdt-quad-spi-interfacing-problem-with-flash-s70fl01gs

器件型号:TM4C129ENCPDT

您好!

下面我附加了代码、通过四通道 SPI 将数据写入闪存。但无法看到任何数据写入器件。请检查代码并返回


 * main.c
 *


#include
   #include
   #include "inc/hw_memmap.h"
   #include "driverlib/debug.h"
   #include "driverlib/gpio.h"
   #include "driverlib/rom.h"
   #include "driverlib/sysctl.h"
   #include "driverlib/ssi.h"
   #include "driverlib/adc.h"
   #include "driverlib/pin_map.h"
   #include "driverlib/uart.h"

   #include "inc/hw_ints.h"















int main (void){
   
int i;
   uint32_t ui32SysClk、ui32Index、data_page[20]、ID_Check;
         uint32_t Rx_data[20]= 0x00;
         //定义要接收的数据
         uint32_t ui32废物桶,ID_CHECK;
         //将系统时钟设置为25MHz
         ui32SysClk = SysCtlClockFreqSet (SYSCTL_USE_OSC | SYSCTL_OSC_main | SYSCTL_XTAL_25MHz、25000000);
            //spinit();
           //数据();




         SysCtlPeripheralEnable (SYSCTL_Periph_SSI3);
                  SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);
                  SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);


                  SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
                            GPIOP1_SSI3XDAT3);
                            GPIOPinConfigure (GPIO_PP0_SSI3XDAT2);
                            GPIOPinConfigure (GPIO_PF0_SSI3XDAT1);
                            GPIOPinConfigure (GPIO_PF1_SSI3XDAT0);
                            GPIOPinTypeGPIOOutput (GPIO_PORTL_base、GPIO_PIN_0 | GPIO_PIN_1);
                            GPIOPinWrite (GPIO_PORTL_BASE、
                                                 GPIO_PIN_0、0XFF);

                                      GPIOPinWrite (GPIO_PORTL_BASE、
                                                 GPIO_PIN_0、0XFF);
                            GPIOPinConfigure (GPIO_PF3_SSI3CLK);
                            //将 GPIO 端口引脚类型启用为 SPI
                            GPIOPinTypeSSI (GPIO_PORTP_BASE、(GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3));
                            GPIOPinTypeSSI (GPIO_PORTF_BASE、GPIO_PIN_3);
                            //为模块提供冷盘。
                            SSIConfigSetExpClk (SSI3_base、120000000、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、1000000、 8);
                            SSIAdvModeSet (SSI3_base、SSI_ADV_MODE_Quad_WRITE);
                            //SSIAdvFrameHoldEnable (SSI3_base);
                            SSIEnable (SSI3_base);
            GPIOPinWrite (GPIO_PORTL_BASE、
                       GPIO_PIN_0、0XFF);

            GPIOPinWrite (GPIO_PORTL_BASE、
                       GPIO_PIN_1、0XFF);


            GPIOPinWrite (GPIO_PORTL_base、GPIO_PIN_0、0X00);

            SSIDataPut (SSI3_base、0x06);

            GPIOPinWrite (GPIO_PORTL_base、GPIO_PIN_0、0XFF);
            uint32_t getStatus;

            GPIOPinWrite (GPIO_PORTL_base、GPIO_PIN_0、0X00);
                    SSIAdvModeSet (SSI3_base、SSI_ADV_MODE_WRITE);
                    

                    //SSIAdvModeSet (ui32Base、SSI_ADV_MODE_WRITE);
                    //SSIAdvFrameHoldEnable (SSI3_base);

                    SSIDataPut (SSI3_base、0x02); //发送页面程序命令

                  GPIOPinWrite (GPIO_PORTL_base、GPIO_PIN_0、0XFF);

                  GPIOPinWrite (GPIO_PORTL_base、GPIO_PIN_0、0X00);
                    SSIDataPut (SSI3_base、(0 >> 16)& 0xff);
                    SSIDataPut (SSI3_base、(0 >> 8)& 0xff);
                    SSIDataPut (SSI3_base、0和0xff);

                    //高芯片选择

                  GPIOPinWrite (GPIO_PORTL_base、GPIO_PIN_0、0XFF);


                GPIOPinWrite (GPIO_PORTL_base、GPIO_PIN_0、0X00);

for (i=0;i<100;i++)

               SSIDataPut (SSI3_base、0xFF);
               while (SSIBusy (SSI3_base));




GPIOPinWrite (GPIO_PORTL_base、GPIO_PIN_0、0XFF);





















   返回0;

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

    [引用 user="Rajeswaran Natarajan"]无法查看写入设备的任何数据。

    这意味着什么? 您是否使用示波器进行过检查? 如果是、您会看到什么?

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们从处理器中检入了示波器 SSI Clk 和数据输出、结果很好。 但是、当我尝试从闪存中读取数据时、当我尝试查看示波器时、数据输入信号不可用。 此外、当我执行 SSIDataGet API 时、系统会进入故障 ISR。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您发布的代码相当混乱、很难查看代码并尝试提供帮助。 请将其组织成多个块、首先清楚地显示每个块的功能(例如 SPI 初始化、向外部器件写入数据、从读取数据等)。
    在此处发布代码时、请使用 按钮、以便其他人可以更清楚地阅读它。
    最后、您提到 SSIDataGet 进入故障 ISR、但您的代码中没有这样的调用...
    我认为,你目前的正确帮助是"组织你的问题"。 写下您想要做的事情、检查一下您已经测试过的内容... 您是否看到 SSI 脉冲发出? 它们是否位于 MOSI 线路上? 两侧是否正确连接? 您是否看到 SSI 时钟输出? 您是否检查了 CS 线路的正确行为? 所有这些之后、您是否看到 SSI 从存储器传入?
    至于不存在的 SSIDataGet、您可能会尝试将 SSI 位写入错误引用的存储器位置。
    此致
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    海报 Robert 和 Bruno 提供"声音"建议/指导。

    Bruno's (有点长... [看谁在说话])指导可以通过"kiss!"总结(因此减少了) (这一术语在波士顿和这里都被禁止、因为"原因不明"。)

    前面提到的"SSIDataGet ()"应该"紧跟"SSIDataPut()"之后-实际上-从机数据应该在根据"SSIDataPut()"生成的 SPI 时钟期间输出。 (注意那些数据位-从器件输出-在 SSIDataPut()期间-不响应当前的"Put"。 (即提供数据以响应"先放置一个"。)

    最常-而不是依赖"海报保证"、"一切都好"-您提供最近的示波器捕获-每个信号线都清晰标记/注明-以及"产生捕获"的操作条件、这些操作条件极大地使您(始终)谦逊的"外部支持 Crüe。" (也许应该注意-过去几天的"外部"证明(几乎完全)您的支持 crüe!)