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.

[参考译文] LP-EM-CC2340R5:是否有任何与外部闪存通信的代码示例?

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1504041/lp-em-cc2340r5-any-code-examples-communicating-with-external-flash

器件型号:LP-EM-CC2340R5
主题:SysConfig 中讨论的其他器件

工具/软件:

嘿! 我很好奇使用外部闪存(MX25R8035F ). 我们正在考虑在我们的项目中使用相同的闪存、并创建 HAL 以读取和写入它。  

我在 SysConfig 生成的文件中看到有一个用于将闪存置于睡眠模式的位拆裂函数。  

void Board_sendExtFlashByte(uint8_t byte)
{
    uint8_t i;

    /* SPI Flash CS */
    GPIO_write(BOARD_EXT_FLASH_SPI_CS, 0);

    for (i = 0; i < 8; i++) {
        GPIO_write(BOARD_EXT_FLASH_SPI_CLK, 0); /* SPI Flash CLK */

        /* SPI Flash PICO */
        GPIO_write(BOARD_EXT_FLASH_SPI_PICO, (byte >> (7 - i)) & 0x01);
        GPIO_write(BOARD_EXT_FLASH_SPI_CLK, 1);  /* SPI Flash CLK */

        /*
         * Waste a few cycles to keep the CLK high for at
         * least 45% of the period.
         * 3 cycles per loop: 8 loops @ 48 MHz = 0.5 us.
         */
        CPUDelay(8);
    }

    GPIO_write(BOARD_EXT_FLASH_SPI_CLK, 0);  /* CLK */
    GPIO_write(BOARD_EXT_FLASH_SPI_CS, 1);  /* CS */

    /*
     * Keep CS high at least 40 us
     * 3 cycles per loop: 700 loops @ 48 MHz ~= 44 us
     */
    CPUDelay(700);
}


我看到在一些较旧的 CC 器件上、有使用一些外部闪存通信的 OTA 示例代码。 有什么与 CC23xx 系列类似的吗? 特别是任何比发送 ExtFlashByte 更深的内容、请提供阅读示例。 谢谢!

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

    嗯...  有点回答我自己的问题,并发展了我的问题:我应该如何保持 CS 低到足够长的时间,让我的外围设备与我说话?


    刚实现、我可以轻松将 SysConfig 与 SPI 配合使用。 如果任何其他读数不符合 SPI 要求、请确保您将 CS 线路保持在低电平足够长的时间、从而获得外设的响应! 难怪 MISO 总是低...

    我的问题是在命令写入之间进行 CS 线路切换。小500ns CS bloop 会复位大多数外设缓冲器、我刚才学习了Slight smileμ s



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

    您好、Cameron、

    这是一个用于外部闪存的小片段:

    (#include "ti/common/flash/no_rtos/extFlash/ext_flash.h")  

        extFlashOpen();
    
        if (false == extFlashErase(offset, 0x42FFF))
        {
            while (1)
            {
                ;
            }
        }
    
        if (false == extFlashRead(offset, sizeof(uint32_t), (uint8_t *)&buf))
        {
            while (1)
            {
                ;
            }
        }
        else
        {
            if (buf != 0xffffffff)
            {
                while (1)
                {
                    ;
                }
            }
        }

    谢谢、
    Alex F

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

    你是我的英雄 Alex -这说明了 extFlashSelect 如何手动将 CS 线路保持在低电平。 这是拼图中缺失的部分。

    不管怎么说,我有一个有效的解决方案。 我认为它是丑陋的,所以如果你知道一个更好的方法,我会喜欢你的0.02美元 :
    我的工作:
    • 通过 SPI_CONTROL 禁用 CSn 自动引脚控制(spiFlashHandle、SPILF3DMA_CMD_CLEAR_CSN_PIN、NULL);
    • 我的自定义 SPI 传输:GPIO 写入 CS 低电平-> SPI_TRANSFER ->将 CS 写入高电平

    我担心的是幕后的东西重新启用此 SPI CS 控件、闪存似乎已死

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

    您好、Cameron、

    如果我们担心其他事情可能会中断您的进程、您可以使用信标来保护您的操作。

    谢谢、
    Alex F