Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino零点I2C引脚的正确配置(通常为保留引脚)_Arduino_Cortex M_Samd21 - Fatal编程技术网

Arduino零点I2C引脚的正确配置(通常为保留引脚)

Arduino零点I2C引脚的正确配置(通常为保留引脚),arduino,cortex-m,samd21,Arduino,Cortex M,Samd21,我在Atmel Studio的SAMD21上使用Arduino零核。我有一个I2C设备连接到引脚PB02(Arduino零引脚19)和PB03(Arduino零引脚25)。作为旁注,这个完全相同的设备在常规导线(sercom3、20、21)上运行,没有问题 我做的第一件事是禁用RX灯引脚,通过使用引脚LED引脚RXL注释出部分 然后我尝试了典型的: twowiremywire(&sercom5,19,25);//在SERCOM5、PA16、PA17上创建I2C
 无效设置(){
 //.

我在Atmel Studio的SAMD21上使用Arduino零核。我有一个I2C设备连接到引脚PB02(Arduino零引脚19)和PB03(Arduino零引脚25)。作为旁注,这个完全相同的设备在常规导线(sercom3、20、21)上运行,没有问题

我做的第一件事是禁用RX灯引脚,通过使用引脚LED引脚RXL注释出部分

然后我尝试了典型的:

twowiremywire(&sercom5,19,25);//在SERCOM5、PA16、PA17上创建I2C
    
无效设置(){

//...
myWire.begin();//压力传感器1
PinPipheral(19,PIO_SERCOM_ALT);//更改PIO、SDA1的功能
pinperipal(25,PIO_SERCOM_ALT);//SCL1
   
//...
}
然后我尝试从I2C组件中读取4:

unsigned int recv[4]={0};
    
          
myWire.requestFrom(接口地址,4,1);//获取4字节的数据
while(ps1_wire.available()){
recv[i++]=ps1_wire.read();
}
结果总是0。我没有收到响应,它告诉我从设备发送NACK-INTFLAG.MB(总线上主中断启用)位已设置,数据寄存器中没有数据

奇怪的是,当我将引脚的pin外围设备设置为
PIO_SERCOM_ALT
时,PB02(引脚19)的PINCFG寄存器没有正确设置-尽管设置了MUX启用(PMUXEN),但输入启用(INEN)仍然设置,驱动强度(DRVSTR)也没有被驱动得很高

我知道
pinperipal()
没有设置DRVSTR或INEN,但这让我想到,在芯片启用期间,该引脚或其他引脚可能会影响其作为I2C的能力

PMUX寄存器设置正确,指示MUX设置3,根据数据表,这对于SERCOM5 PAD[0]和PAD[1]是正确的-这是MUX功能D(第34页)

Sercom寄存器的初始化看起来很好。为了更好地测量,我确实更改了variant.h以包括I2C的Sercom5中断:

#定义接线接口(计数2)
#定义引脚线SDA(20u)
#定义引脚线SCL(21u)
#定义外围线sercom3
#定义WIRE\u IT\u处理程序SERCOM3\u处理程序
静态常数8_t SDA=引脚线SDA;
静态常数8\u t SCL=引脚线SCL;
#定义引脚线1\u SDA(19u)
#定义引脚线1\u SCL(25u)
#定义外围线路1 sercom5
#定义WIRE1_IT_处理程序SERCOM5_处理程序
静态常数8_t SDA1=引脚线1_SDA;
静态常数8\u t SCL1=引脚线1\u SCL;
仍然面临相同的问题-调用
requestFrom()
时,设备无法获取返回数据

如果有人对我尝试使用这些引脚的方式有任何见解,以及如何让I2C在Sercom5的PB02和PB03上工作,我将非常感谢任何帮助


谢谢大家!

本教程用于将I2C用作从(I2CS)而不是主(I2CM)。这是一个不同的SERCOM配置。我认为I2C主控或从控的SERCOM配置没有区别。这是绝对的区别——它们不携带相同的寄存器值。然而,我或多或少地解决了这个问题。数据表声称PB02和PB03虽然是SERCOM引脚,但不适用于I2C通信。