2015-03-31 39 views
0

我目前正在使用一個3D打印機,像項目,我必須使用PcDuino的SPI來控制3個步進驅動器。有很少的examples,只有一個壞的文檔描述了我在找什麼。看起來預安裝的API不支持多個從服務器,但是如果我正確地理解了它,我只需要添加更多的CS線並將它們自己控制。用PcDuino SPI總線連接多個從站

還有什麼需要照顧的?我需要多長時間在發送或接收數據時將CS保持爲低電平?

(嗯,我想接收是沒有問題的,因爲它是另一條線是這樣)

回答

0

原來是安靜簡單: 只要有選擇,轉讓和取消。 無需睡眠或等待。 選擇和取消選擇必須使用引腳設備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

唯一的困難:主必須取消並重新選擇所述從供傳送的每個字節。 (但這可能是從芯片的問題,不確定,只是測試了包括Arduino在內的3種不同設備)