簡體   English   中英

使用mcp2210從atmel m90e26s讀取地址

[英]read address from atmel m90e26s using mcp2210

我正在做一個學校項目,我們想使用atmel M90e26s芯片監控能耗。

我使用了mcp2210庫並編寫了這個小腳本:

void talk(hid_device* handle) {
ChipSettingsDef chipDef;

//set GPIO pins to be CS
chipDef = GetChipSettings(handle);

for (int i = 0; i < 9; i++) {
    chipDef.GP[i].PinDesignation = GP_PIN_DESIGNATION_CS;
    chipDef.GP[i].GPIODirection = GPIO_DIRECTION_OUTPUT;
    chipDef.GP[i].GPIOOutput = 1;
}
int r = SetChipSettings(handle, chipDef);

//configure SPI
SPITransferSettingsDef def;
def = GetSPITransferSettings(handle);

//chip select is GP4
def.ActiveChipSelectValue = 0xffef;
def.IdleChipSelectValue = 0xffff;
def.BitRate = 50000l;
def.SPIMode = 4; 

//enable write
byte spiCmdBuffer[3];


//read 8 bytes
def.BytesPerSPITransfer = 3;
r = SetSPITransferSettings(handle, def);
if (r != 0) {
    printf("Errror setting SPI parameters.\n");
    return;
}

spiCmdBuffer[0] = 0x01; //0000 0011 read
spiCmdBuffer[1] = 0x00; //address 0x00

SPIDataTransferStatusDef def1 = SPISendReceive(handle, spiCmdBuffer, 3);

for (int i = 0; i < 8; i++)
    printf("%hhu\n", def1.DataReceived[i]);
}

我嘗試的任何地址,我都沒有回應。 問題似乎是這樣的:

spiCmdBuffer[0] = 0x01; //0000 0011 read
spiCmdBuffer[1] = 0x00; //address 0x00

我從數據表中知道spi接口看起來像這樣: spi接口

有人可以幫我從atm90e26查找地址寄存器嗎? 所有地址看起來都像“ 01H”,但這不是十六進制,也不是7位。

是的,您懷疑問題在於如何設置spiCmdBuffer的內容。 ATM90E26期望讀/寫標志和寄存器地址都在SPI事務的第一個字節中:讀/寫標志必須放在最高有效位(從寄存器讀取的值為1,從寫入值為0寄存器),而寄存器地址在剩余的7位中。 因此,例如,要讀取地址為0x01(SysStatus)的寄存器,代碼將如下所示:

spiCmdBuffer[0] = 0x80 | 0x01;  // read System Status

0x80值將最高有效位設置為讀/寫標志,另一個值指示寄存器地址。 3字節讀取序列的第二和第三字節不需要設置為任何值,因為ATM90E26會忽略它們。

調用SPISendReceive()之后,要提取寄存器內容(16位),必須從讀取的事務中接收的數據中讀取第二個和第三個字節(MSB優先),如下所示:

uint16_t regValue = (((uint16_t)def1.DataReceived[1]) << 8) | def1.DataReceived[2];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM