首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mcp2210从atmel m90e26s读取地址

使用mcp2210从atmel m90e26s读取地址
EN

Stack Overflow用户
提问于 2017-11-06 19:33:12
回答 1查看 176关注 0票数 0

我正在做一个学校项目,我们想用爱特梅尔公司的M90e26s芯片来监控能源消耗。

我使用了mcp2210库并编写了这个小测试脚本:

代码语言:javascript
复制
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]);
}

无论我尝试什么地址,都得不到响应。问题似乎是这样的:

代码语言:javascript
复制
spiCmdBuffer[0] = 0x01; //0000 0011 read
spiCmdBuffer[1] = 0x00; //address 0x00

我从数据表中了解到spi接口是这样的:spi interface

有人能帮我从atm90e26中找到地址寄存器吗?所有的地址看起来都像'01H',但它不是十六进制的,也不是7位。

EN

回答 1

Stack Overflow用户

发布于 2018-11-02 00:55:50

是的,正如您所怀疑的,问题出在您设置spiCmdBuffer内容的方式上。ATM90E26要求读/写标志和寄存器地址都在第一个字节中:读/写标志必须置于最高有效位(值1用于从寄存器读取,值0用于写入寄存器),而寄存器地址位于其余7位。例如,要读取地址0x01 (SysStatus)的寄存器,代码应如下所示:

代码语言:javascript
复制
spiCmdBuffer[0] = 0x80 | 0x01;  // read System Status

0x80值设置最高有效位的读/写标志,另一个值表示寄存器地址。3字节读取序列的第二个和第三个字节不需要设置为任何值,因为它们会被ATM90E26忽略。

调用SPISendReceive()后,要提取寄存器内容(16位),必须从读取事务中接收的数据中读取第二个和第三个字节(最大有效位优先),如下所示:

代码语言:javascript
复制
uint16_t regValue = (((uint16_t)def1.DataReceived[1]) << 8) | def1.DataReceived[2];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47136038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档