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.

[参考译文] MSP432P401R:我尝试从 Winbond SPI 闪存读取器件 ID。在以下配置下、SPI I#39;m 在传输第一个字节数据时未获取时钟。您能帮助我从 SPI 闪存读取器件 ID 吗

Guru**** 2604225 points
Other Parts Discussed in Thread: CC2650STK

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/649941/msp432p401r-i-am-trying-to-read-the-device-id-from-winbond-spi-flash-with-the-below-configurations-for-spi-i-m-not-getting-clock-when-i-transmit-a-first-byte-of-data-can-you-please-help-me-to-read-the-device-id-from-spi-flash

器件型号:MSP432P401R
主题中讨论的其他器件:CC2650STK

/*
* ACLK =~32.768kHz、MCLK = SMCLK = DCO 3MHz
*
*
* MSP432P401
*************************************
*||
*| P9.4|->芯片选择
*||
*| P9.7|->数据输出(UCA3SIMO)
*||
*| P9.6|<-数据输入(UCA3SOMI)
*||
*| P9.5|->串行时钟输出(UCA3CLK)
秘书长的报告 /
/* DriverLib 包括*/
#include

/*标准包括*/
#include
#include

#define ID_ERROR 0x01
#define READ_ERROR 0x02
#define STATUS_OK 0x00

uint32_t read_ID (){

uint32_t ID = 0、I;
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P9、GPIO_PIN4);
for (i=0;i<100;i++)
MAP_SPI_transmitData (EUSCI_A3_base、0x9F);
ID = SPI_receiveData (EUSCI_A3_base);
MAP_SPI_transmitData (EUSCI_A3_base、0x00);
ID = SPI_receiveData (EUSCI_A3_base);
SPI_transmitData (EUSCI_A3_base、0x00);
ID = SPI_receiveData (EUSCI_A3_base);
ID <<= 8;
MAP_SPI_transmitData (EUSCI_A3_base、0x00);
ID += MAP_SPI_receiveData (EUSCI_A3_base);
ID <<= 8;
MAP_SPI_transmitData (EUSCI_A3_base、0x00);
ID += MAP_SPI_receiveData (EUSCI_A3_base);
MAP_GPIO_setOutputHighOnPin (GPIO_PORT_P9、GPIO_PIN4);
退货 ID;

uint8_t Check_ID (){
uint32_t ID;
ID = READ_ID ();//读取设备 ID
if (ID!= 0xEFAA21){
返回 ID_ERROR;

否则{
返回 STATUS_OK;

//![简单 SPI 配置]
/* SPI 主配置参数*/
const eUSCI_SPI_MasterConfig spiMasterConfig =

EUSCI_A_SPI_CLOCKSOURCE_SMCLK、// SMCLK 时钟源
3000000、// SMCLK = DCO = 3MHz
500000、// SPICLK = 500kHz
EUSCI_A_SPI_MSB_FIRST、// MSB 优先
EUSCI_A_SPI_PHASE_DATA_Captured_ONFIRST_Changed_ON_NEXT、//相位
EUSCI_A_SPI_CLOCKPOLARITY_INACT_HIGH、//极性
EUSCI_A_SPI_4PIN_UCxSTE_ACTIVE_LOW // 4线 SPI 模式
};


int main (空)

uint8_t ii;

MAP_WDT_A_HOLDTimer();

MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P9、
GPIO_PIN6、GPIO_PRIMARY_MODULE_FUNCTION);

MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P9、
GPIO_PIN7 | GPIO_PIN5、GPIO_PRIMARY_MODULE_FUNCTION);

MAP_GPIO_setAsOutputPin (GPIO_PORT_P9、GPIO_PIN4);
MAP_GPIO_setOutputHighOnPin (GPIO_PORT_P9、GPIO_PIN4);

MAP_SPI_selectFourPinFunctionality (EUSCI_A3_base、EUSCI_SPI_ENABLE_SIGNAL for _4WIRE_SLAVE);
/*启用 SPI 模块*/

MAP_SPI_initMaster (EUSCI_A3_base、&spiMasterConfig);
MAP_SPI_enableModule (EUSCI_A3_base);
for (ii = 0;ii < 200;ii +);
check_id();
while (1);

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

    我们将一个使用外部串行闪存的无线示例(使用低功耗蓝牙)汇总在一起、遗憾的是、我们使用的是 Macronix 串行闪存。

    话虽如此、CC2650STK - www.ti.com/.../CC2650STK 附带 Winbond W25X20CL 串行闪存、因此您可以使用此代码作为参考来读取器件 ID。

    请从 此处 www.ti.com/.../ble-stack 下载 BLE-STACK-2-2-1 、并查找 ext_flash.c 文件和 API extFlashVerifyPart

    希望这对您有所帮助。

    David