【问题标题】:Connecting multiple slaves with PcDuino SPI bus使用 PcDuino SPI 总线连接多个从机
【发布时间】:2015-03-31 10:53:33
【问题描述】:

我目前正在开发一个类似 3D 打印机的项目,我必须使用 PcDuino 的 SPI 控制 3 个步进驱动器。 examples 很少,只有一个糟糕的文档描述了我在寻找什么。似乎预装的 API 不支持多个从站,但如果我理解正确的话,我只需要添加更多的 CS 行并自己控制它们?

还有什么需要注意的吗?在发送或接收数据时我需要将 CS 保持在低电平多长时间?

(好吧,我想接收没问题,因为它在另一条线上)

【问题讨论】:

    标签: spi


    【解决方案1】:

    结果很安静: 只需选择、转移和取消选择。 无需睡眠或等待。 选择和取消选择必须使用 pin devices api 完成, 所以你可以使用尽可能多的奴隶,因为你有空闲的针。

    示例实现:

    void GPIOpin::set(FILE* fd, size_t value) {
        char buffer[4];
        memset(buffer, 0, 4);
        sprintf(buffer, "%d", value);
        fseek(fd, 0, SEEK_SET);
        fwrite(buffer, 1, 4, fd);
        fflush(fd);
    }
    
    bool SPI::transfer(size_t slaveIndex, uint8_t* buffer, uint64_t size) const {
        if(!handle) return false;
    
        struct spi_ioc_transfer transfer;
        memset(&transfer, 0, sizeof(transfer));
        transfer.len = 1;
    
        for(size_t i = 0; i < size; ++i) {
            slaveCS[slaveIndex].setValue(0);
            transfer.tx_buf = transfer.rx_buf = (uint64_t)&buffer[i];
            if(ioctl(handle, SPI_IOC_MESSAGE(1), &transfer) != transfer.len)
                return false;
            slaveCS[slaveIndex].setValue(1);
        }
    
        return true;
    }
    

    完整代码: https://github.com/Lichtso/PrismCNC/tree/master/backend

    唯一的困难:对于传输的每个字节,主设备必须取消选择并重新选择从设备。 (但这可能是从芯片的问题,不确定,刚刚测试了 3 种不同的设备,包括一个 Arduino)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 2021-02-13
      • 2021-05-13
      • 2022-10-01
      • 2015-09-13
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多