硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1334|回复: 1
收起左侧

RP2040 SPI从机模式调不通,官方也没例子, 彻底放弃了

[复制链接]

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2022-3-16 18:02:54 | 显示全部楼层 |阅读模式

故障现象:只能接受第1个字节数据。
RP2040只能收到一个字节,然后阻塞到 spi_is_readable(spi)一直返回false


spi主机每次只发送1个字节,发送期间CS=0, 完毕CS=1.  如果不接CS,第1个字节也无法读取.

代码如下:


// --- SPI引脚定义---
#define SPI_CSN_PIN                10  


#define SPI_SCK_PIN                18        
#define SPI_TX_PIN                19
#define SPI_RX_PIN                16


#define SPI_INSTANS                spi0


int TestSpiSlave(void)
{
    stdio_init_all();


    // Enable SPI at 125 MHz and connect to GPIOs
    spi_init(SPI_INSTANS, 1 * 1000000); //
   
    spi_set_slave(SPI_INSTANS, true); // 设置从机模式
    gpio_set_function(SPI_RX_PIN, GPIO_FUNC_SPI);
    gpio_set_function(SPI_CSN_PIN, GPIO_FUNC_SPI);
    gpio_set_function(SPI_SCK_PIN, GPIO_FUNC_SPI);
    gpio_set_function(SPI_TX_PIN, GPIO_FUNC_SPI);


    static uint8_t txbuf[TEST_SIZE];
    static uint8_t rxbuf[TEST_SIZE];
   
    for (uint i = 10; i < TEST_SIZE; ++i) {
        txbuf = i;
    }


    while (1)
    {
        spi_read_blocking(SPI_INSTANS, txbuf, 1);        
    }
    return 0;
}



--------------------------
int __not_in_flash_func(spi_read_blocking)(spi_inst_t *spi, uint8_t repeated_tx_data, uint8_t *dst, size_t len) {
    invalid_params_if(SPI, 0 > (int)len);
    const size_t fifo_depth = 8;
    size_t rx_remaining = len, tx_remaining = len;


    while (rx_remaining || tx_remaining) {
        if (tx_remaining && spi_is_writable(spi) && rx_remaining < tx_remaining + fifo_depth) {
            spi_get_hw(spi)->dr = (uint32_t) repeated_tx_data;
            --tx_remaining;
        }
        if (rx_remaining && spi_is_readable(spi)) {       // 收到一个字节后,spi_is_readable(spi) 条件就满足了
            *dst++ = (uint8_t) spi_get_hw(spi)->dr;
            --rx_remaining;
        }
    }


    return (int)len;
}

回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
 楼主| 发表于 2022-3-19 04:13:49 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 14:47 , Processed in 0.143225 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表