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.

[参考译文] CC3220SF-LAUNCHXL:与 MX25L6433F 进行 CC3220SF SPI 通信

Guru**** 2540720 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/783164/cc3220sf-launchxl-cc3220sf-spi-communication-with-mx25l6433f

器件型号:CC3220SF-LAUNCHXL
主题中讨论的其他器件:CC3220SFCC3220SDK

我尝试将 SPI 通信与 MX25L6433F 连接、

CC3220SF 具有主设备。

从 设备- MX25L6433F 8MB 闪存

我没有使用 Board_SPI_MASTER_READY 和 Board_SPI_SLAVE_READY。

仅使用 SPI_CS、SPI_MOSI、SPI_MISO、SPI_CLK 板提及 SPI_CS 此引脚自动处理(或)我需要手动处理?

我正在尝试读取  MX25L6433F 中的读取识别(命令9F)表、它将返回 1字节的制造商 ID、后跟2字节的器件 ID、但我没有收到任何内容?

/*
=== spimaster.c ====
*/
#include 
#include 
#include 
#include 

/* POSIX 头文件*/
#include 
#include 
#include 

/*驱动程序头文件*/
#include 
#include 
#include 

/*示例/板头文件*/
#include "Board.h"

#define THREADSTACKSIZE (1024)

#define SPI_MSG_LENGTH (1)
#define MASTER_MSG ("Hello from master、msg#:")

#define MAX_LOOP (10)

静态 Display_Handle 显示;

unsigned char masterRxBuffer[5];
unsigned char masterTxBuffer[SPI_MSG_LENG]={0x9F};

//在从器件准备好传输前阻止主器件的信号量*
/ SEM_t masterSem;


*=== masterThread ======
*主器件 SPI 在向从器件发送消息的同时从
从器件接收*消息。
//
void * masterThread (void * arg0)
{
SPI_Handle 主 Spi;
SPI_Params Parspiams;
SPI_Transaction 事务;
uint32_t 一;
布尔 转让;
内部32_t 状态;


/*将 SPI 作为主器件打开(默认)*/
SPI_Params_init (&spiParams);
spiParams.frameFormat = SPI_POL0_PHA0;
spiParams.mode = SPI_MASTER;
spiParams.transferMode = SPI_MODE_BLOCKING;

masterSpi = SPI_open (Board_SPI_master、&spiParams);
if (masterSpi == NULL){
Display_printf (display、0、0、"初始化主器件 SPI\n"时出错);
while (1);
}
否则{
display_printf (display、0、0、"Master SPI initialized");
}

/*将消息复制到发送缓冲区*/
strncpy ((char *) masterTxBuffer、master_MSG、SPI_MSG_LENGTH);

对于(I = 0;I < MAX_LOOP;I++){
/*
*等待从器件准备好传输;从器件将拉取
* Board_SPI_SLAVE_READY 低电平。
*
//sem_wait (&masterSem);

/*初始化主 SPI 事务结构*/
memset ((void *) masterRxBuffer、0、SPI_MSG_LENGTH);
transaction.count = SPI_MSG_length;
transaction.txBuf =(void *) masterTxBuffer;
transaction.rxBuf =(void *) masterRxBuffer;

/*切换用户 LED、指示正在进行 SPI 传输*/
GPIO_TOGGLE (Board_GPIO_LED1);

/*执行 SPI 传输*/
transferOK = SPI_transfer (masterSpi、事务);
if (transferOK){
Display_printf (display、0、0、"主设备已接收:%s"、masterRxBuffer);
}
否则{
display_printf (display、0、0、"主 SPI 传输失败");
}

/*在开始下一个 SPI 传输前睡眠一位*/
睡眠(3);
}

SPI_CLOSE (masterSpi);

/*示例完成-将引脚设置为已知状态*/
GPIO_DisableInt (Board_SPI_SLAVE_READY);
GPIO_setConfig (Board_SPI_SLAVE_READY、GPIO_CFG_OUTPUT | GPIO_CFG_OUT_LOW);
GPIO_WRITE (Board_SPI_MASTER_READY、0);

display_printf (display、0、0、"\nDone");

返回(NULL);
}

{
baseAddr = GSPI_base、
.intNum = INT_GSPI、
.intPriority =(~0)、
spiPRCM = PRCM_GSPI、
.csControl = SPI_HW_CTRL_CS、
csPolarity = SPI_CS_ACTIVELOW、
.pinMode = SPI_4PIN_MODE、
.TurboMode = SPI_Turbo_OFF、
scratchBufPtr =&spiCC3220SDMAscratchBuf[CC3220SF_LAUNCHXL_SPI1]、
defaultTxBufValue = 0、
.rxChannelIndex = UDMA_CH6_GSPI_RX、
txChannelIndex = UDMA_CH7_GSPI_TX、
.minDmaTransferSize = 10、
.mosipin = SPICC32XXDMA_PIN_07_MOSI、
MISO 引脚= SPICC32XXDMA_PIN_06_MISO、
clkPin = SPICC32XXDMA_PIN_05_CLK、
.csPin = SPICC32XXDMA_PIN_08_CS
}

为什么我不能在出错的地方读写?

谢谢你

  瓦苏

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

    MX25L6433F 不是我们专门测试过的串行闪存器件之一。

    我建议您首先参阅我们的应用手册《将串行闪存与 CC3220配合使用》(www.ti.com/.../swra515.pdf) 、以确保您选择的器件支持必要的命令、格式并在参数方面兼容。


    谢谢、
    Alexis
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Alexis、
    感谢您的回答、
    我认为您误解了我的问题。
    我没有告诉 cc3220sf+串行闪存我正在使用 cc3220sf launchpad 连接到外部串行闪存、仅用于存储我们的数据和一些配置详细信息、例如 Modbus 请求、MQTT 配置等。
    我们使用 MX25L6433F 8MB 该闪存其他 TI 控制器 STM、Renesas 来存储我们的数据 cc3220sf、我们也使用相同的用途。
    此闪存充当正常存储设备这不是网络处理器闪存。
    我想现在对您来说很清楚。

    现在看我的问题告诉我为什么我不能读取闪存?
    我在哪里犯了错误?

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

    为什么不使用逻辑分析仪来确定 SPI 上发生了什么情况?

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

    我们没有逻辑分析仪、但我们有 CRO、我将在这之后检查、让您知道。

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

    我将.csControl = SPI_HW_CTRL_CS 更改为 csControl = SPI_SW_CTRL_CS 正常工作、但我不使用自定义 CS 引脚。
    我正在发送读取识别(0x9F)命令、获取三个字节的器件信息工作正常。
    如果尝试对其进行写入、则不能进行写入、也不能进行读取。

    1)如何在不读取的情况下单独写入命令?
    2)如何用数据写入命令?
    3)如何写入读取命令和读取数据?
    4) transaction.count = SPI_MSG_length;//此处我需要发送接收数据 count?
    您是否有使用此闪存进行读写的小代码?

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

    我不是 TI 驱动程序的专家、但有一些建议:

    1)如何在不读取的情况下单独写入命令?
    -只需将 rxBuf 设置为 NULL,如此处所述( e2e.ti.com/.../2881686 )

    2) 2)如何使用数据写入命令?
    -只需写入更多字节

    3)如何写入读取命令和读取数据?
    -I2C 为全双工。 有关如何使用 SPI 读取/写入 SDK 中"spimaster"示例中的数据的好示例。 数据表中记录了闪存的命令。

    4) transaction.count = SPI_MSG_length;//此处我需要发送接收数据 count?
    -是的,当您通过 SPI 发送数据时,您需要知道要发送多少字节。

    5) 5)您是否有使用此闪存进行读写的小代码?
    否 我没有编写如何使用该闪存的代码。 但是、如果您能够在其他平台(STM、Renesas)上使用此闪存、则在 CC3220的实现方面不会有任何问题。 您需要能够在 CC3220的 SPI 上读取/写入数据、所有其他内容都涉及数据集的闪存使用。

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

    在发送请求时、我错误地将每个命令感应到同一个数组。
    uint8_t request_flash[20]={0x06、0x02、0x00、0x00、0x00、... data};//未工作
    0x06-写入使能,0x02页程序,0x00地址
    我使用的其他控制器位拆裂方法、驱动程序、但 cc3220sf 仅使用一个使用 SPI_transfer (传输和接收数据)的 API、因为这是混淆的原因。
    现在、我已经很清楚了、我创建了单独的函数、传递参数 TX buff、recv buff、count。
    每个单独发送的命令首先向函数传递写入 enable (0x06)命令。
    下一个函数调用检查状态寄存器该位是否置位。
    下一个函数调用写入数据(0x02,0x00,0x00,0x00....数据}。
    下一个函数调用读取数据{0x03、0x00、0x00、0x00}
    我可以正常读取和写入数据。
    由于办公室关闭、擦除未选中。

    我还有一个疑问、
    1) cc3220sf SPI 主器件的最大工作频率是多少?
    2) 2)我可以在 cc3220sf 中设置多少最大频率?
    闪存正常读取50MHz。
    3) 3) cc3220sf +网络处理器使用相同的 MX25系列闪存创建文件夹的方式文件创建方式、例如:网页
    但是,闪存文档没有提到文件夹文件创建?

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

    1) 2) 数据表(第5.15.6.1.1章)介绍了 CC3220 SPI 外设的参数-最大值。 SPI 主器件的时钟频率为20MHz。

    3) CC32xx Fiel野 系统不支持目录。 文件系统实际上是平坦的。 /www/index.html 或/sys/mcuimg.bin 等名称只是长名称的约定。

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

    感谢您帮助我解决此问题。

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

    使用 spiffs 库是什么?
    我是否可以将 spiffs cc3220sdk 第三方库用于 SPI 闪存?
    如何为外部 SPI 闪存创建平面文件系统您是否有任何文档?

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

    我对该第三方代码没有任何经验。

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

    感谢你的答复。
    我尝试寻找其他解决方案。

    瓦苏