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.

[参考译文] MSP432E401Y:在传统 SPI 模式下手动将从器件选择引脚(FSS)置为有效

Guru**** 2585275 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/717389/msp432e401y-asserting-slave-select-pin-fss-manually-in-legacy-spi-mode

器件型号:MSP432E401Y

您好!

我尝试在 SPI Legacy (Motorola)模式下访问闪存芯片。

我的问题是、只要传输正在进行、我就需要保持 FSS 引脚的有效状态。

以下是我用于 Microchip µC 的示例:

FRAM_CS_IO = 0; //将芯片置为有效
_Send (FRAM_CMD_RDSR);//发送命令
dummy =_get();//获取状态寄存器内容
FRAM_CS_IO = 1;//使芯片无效

// TI 设置:
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
MAP_GPIOPinConfigure (GPIO_PA2_SSI0CLK);
MAP_GPIOPinConfigure (GPIO_PA3_SSI0FSS);
MAP_GPIOPinConfigure (GPIO_PA4_SSI0XDAT0);
MAP_GPIOPinConfigure (GPIO_PA5_SSI0XDAT1);
MAP_GPIOPinTypeSSI (GPIO_PORta_base、(GPIO_PIN_2 | GPIO_PIN_3 |
GPIO_PIN_4 | GPIO_PIN_5));

MAP_SSIConfigSetExpClk (SSI0_BASE、g_ui32SysClock、SSI_FRF_MOTO_MODE_0、
SSI_MODE_MASTER、(g_ui32SysClock/24)、8);
MAP_SSIEnable (SSI0_BASE);

//从闪存请求状态寄存器:
MAP_SSIDataPut (SSI0_BASE、FLASH_CMD_RDSR);

II = 0;

/*通过检查等待数据从 SSI0发出
* SSI 控制器的忙状态*/
while (map_SSIBusy (SSI0_BASE));

/*清空接收 FIFO,因为移入的数据无效
从器件的*响应*/
while (map_SSIDataGetNonBlocking (SSI0_BASE、&getResponseData));

/*发送轮询请求以查看从机何时响应
*准备好响应数据包*/
MAP_SSIDataPut (SSI0_BASE、sendDummyData);
MAP_SSIDataGet (SSI0_BASE、&getData[II]); 

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

    您好、Simon、

    您能帮我理解这个问题吗? TRM 的内容如下:

    这意味着、如果您使用任何 Freescale SPI 帧格式(从代码中、看起来您使用的是 Freescale SPI 帧格式)进行传输、FSS 引脚将被置为有效。

    谢谢、

    SAI

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

    您好!

    实际上、它在整个传输过程中没有拉低、它在发出1个字节后上升到高电平。

    我无法使用自动 FSS 模式、因此我通过将引脚配置为 GPIO 输出并手动执行此操作、更改为手动方式。

    但我遇到了另一个问题、时钟输出信号很弱、SPI 闪存的答案不可靠。

    如果我将示波器连接到时钟线、情况甚至会更糟。

    是否有办法从时钟引脚获取更多功率?

    或者内部是否连接了任何上拉或下拉电阻器?

    //闪存 SPI0
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    
    //MAP_GPIOPinConfigure (GPIO_PA3_SSI0FSS);//自动从器件选择
    GPIOPadConfigSet (GPIO_Porta_base、GPIO_PIN_3、GPIO_Strength _10mA、GPIO_PIN_TYPE_OD);
    ROM_GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、GPIO_PIN_3);//设置为高电平
    ROM_GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_3);//从器件选择
    
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
    MAP_GPIOPinConfigure (GPIO_PA2_SSI0CLK);
    MAP_GPIOPinConfigure (GPIO_PA4_SSI0XDAT0);
    MAP_GPIOPinConfigure (GPIO_PA5_SSI0XDAT1);
    
    //手动从器件选择
    // MAP_GPIOPinTypeSSI (GPIO_Porta_base、(GPIO_PIN_2 | GPIO_PIN_3 |
    // GPIO_PIN_4 | GPIO_PIN_5));
    
    MAP_GPIOPinTypeSSI (GPIO_PORta_base、(GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5)); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 SPI 时钟线路上添加串联电阻(33 R)后、信号会变得更好。

    我计算软件中的错误数并得到347个4084023消息的错误、因此、00.008%的错误率、这是否会更好?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请确认您以5MHz 运行 SPI、并且 GPIO 处于高输出模式。   

    添加串联电阻并观察到信号质量的改善、这意味着您会看到一些传输线路问题、例如反射。  您能否降低速度以查看波形是否改善?

    Chris