标签: i2c

i2c中断处理程序stm32

我有一些I2C2中断的问题,我启用了中断,但处理程序中断从不执行.

这是i2c2的初始化:

void i2c2InitSlave(void)
{
    I2C_DeInit(I2C2);
    GPIO_InitTypeDef GPIO_InitStructure;
    I2C_InitTypeDef I2C_InitStructure;

    /*I2C2 Peripheral clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);

    /* Enable GPIO clock */
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH, ENABLE);

    // I2C2 SCL and SDA Pin configuration
    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOH, &GPIO_InitStructure);

    GPIO_PinAFConfig(GPIOH, GPIO_PinSource4, GPIO_AF_I2C2);
        GPIO_PinAFConfig(GPIOH, GPIO_PinSource5, GPIO_AF_I2C2);

    /* Initialize I2C peripheral */
    /* I2C Init */
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_OwnAddress1 = SLAVE_ADDRESS;
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
    I2C_InitStructure.I2C_ClockSpeed = 100000; …
Run Code Online (Sandbox Code Playgroud)

stm32 i2c

9
推荐指数
1
解决办法
2万
查看次数

为什么i2c_smbus功能不可用?(I2C - 嵌入式Linux)

在开发嵌入式Linux软件以在I2C总线上进行通信时,有许多参考使用i2c_smbus_函数.当在软件项目中引用i2c_smbus函数(例如i2c_smbus_read_word_data)时,ARM8处理器错误(如" i2c_smbus_read_word_data")未在此范围内声明,则在编译时生成.

对以下头文件的研究表明缺少大多数i2c_smbus函数定义.

  • /usr/arm-linux-gnueabi/include/linux/i2c.h
  • /usr/arm-linux-gnueabi/include/linux/i2c-dev.h

同样在以下参考i2c.h文件中定义了所有i2c_smbus.

如何解决这个问题?

研究参考

  1. 在Linux中使用来自用户空间的I2C
  2. Linux用户空间的I2C通信 - 第二部分
  3. I2C开发接口

c c++ arm i2c embedded-linux

9
推荐指数
1
解决办法
2万
查看次数

通过UART进行iPad配件通信

我们为iPad/iPhone制造了一个新配件,它应该将命令传输到iPad.我们喜欢使用UART(通过某种名为Lingo的 Apple协议).我的研究表明,我只能使用USB(30PIN连接器)和自定义协议.

题:

  • 有没有办法使用UART从APP端连接到iPad配件?
  • 如果协议是在UART中实现的,我们应该能够将其移动到USB,如果我的应用程序无法通过USB使用它.

我的主要猜测是UART命令和访问是iPhone OS保留的协议,不适用于Apps.某些UART命令还包括卷和音频重新路由等设置,所以我猜这是安全的.

usb i2c accessory uart ipad

8
推荐指数
1
解决办法
1864
查看次数

I2C设备linux驱动程序

如何为i2c设备制作一个字符设备,具有开放,关闭,ioctl等功能?我在过去两周内一直在寻找有关它的信息,但找不到任何有用的信息.我在Essential Linux设备驱动程序中找到了一些信息,但它是为2.6内核编写的,我使用3.4.79(我试图在cubian distr上为cubieboard2编写这个驱动程序)所以这本书有许多不推荐使用的函数,我试过像那里写我的驱动程序,但它仍然无法工作(当我正在修改cat字符设备时给我内核错误).任何人都可以解释我该怎么做,或者至少给我一个有效的例子.

所以,有我的代码:http: //pastebin.com/T7PBTpym

我只是试着让i2c总线正常工作,但在我的示波器上我没有在i2c线上看到任何东西,而我编译时没有任何错误.另外我找不到如何将设备驱动程序连接到i2c总线编号.因为我的cubieboard2上有4个i2c总线,以及如何将设备驱动程序连接到i2c-1总线上?

c linux i2c linux-device-driver linux-kernel

8
推荐指数
1
解决办法
8762
查看次数

Linux内核中的I2C写确认轮询

这里乏善可陈的反应让我想到了这一点.

我一直背负着一种器件(Analog Devices 525x)(来自数据表,第16页):

在内部[EEPROM]写周期内禁用I2C接口.

这似乎不公平,因为" 我现在正从沙发上下来,所以不要暂时使用它,因为我让一个人在座垫上扯下来 ".老实说,为什么这是我的问题?

无论如何,数据表表明确认轮询就是答案 - 进入Linux内核...... Linux GPIO位是否为基础?I2C驱动程序是否提供了这样做的机制? 基本上发送写入位设置的地址,并继续这样做,直到出现ACK.

我在带有后端口GPIO位抨击驱动程序的ARM上使用2.6.14(我认为是2.6.19).

linux arm i2c

7
推荐指数
1
解决办法
2091
查看次数

如何从I2C总线冲突中恢复BCLIF?

我几天前在Microchip论坛(这里)发布了这个,但唯一的反应是蟋蟀.下面的I2C代码大部分时间都在工作,但偶尔在上电时会发生总线冲突(BCLIF),并且在BCLIF之后I2C模块无法恢复.I2C线路上拉3.3K欧姆.使用REALICE和断点我可以看到i2c_write()重置BCLIF并在设置BCLIF时返回FALSE.我使用示波器来验证I2C总线是否具有扁平线.返回FALSE init_i2c()时重新初始化PIC18F25K20 I2C模块(见下文)i2c_write()无济于事.PIC18F25K20 I2C连接到单个从器件(MCP4018 I2C数字POT).我在之前的PIC18项目中使用了相同的代码而没有出现问题,所以我更换了怀疑是坏部件的MCP4018,但没有看到任何区别.有没有办法在锁定时复位PIC18F25K20 I2C模块?

void init_i2c(I2C_BAUD_RATE baud_rate, float freq_mhz) 
{ 
    UINT32 freq_cycle; 
    /* Reset i2c */ 
    SSPCON1 = 0; 
    SSPCON2 = 0; 
    PIR2bits.BCLIF = 0; 
    /* Set baud rate */ 
    /* SSPADD = ((Fosc/4) / Fscl) - 1 */ 
    freq_cycle = (UINT32) ((freq_mhz * 1e6) / 4.0); 
    if (baud_rate == I2C_1_MHZ) 
    { 
        SSPADD = (UINT8) ((freq_cycle / 1000000L) - 1); 
        SSPSTATbits.SMP = 1;        /* disable slew rate for 1MHz operation */ …
Run Code Online (Sandbox Code Playgroud)

c pic i2c

7
推荐指数
1
解决办法
6476
查看次数

Linux上的I2C并发访问,互斥

我正在嵌入式Linux中编写一个多线程C程序,从用户空间访问许多I2C设备(从设备).此外,我从多个线程访问相同的I2C设备.我正在使用SMBUS函数(i2c_smbus_write_byte_data,i2c_smbus_read_byte_data,i2c_smbus_read_i2c_block_data,...).

是否有内置并发访问的保护或我是否需要自己添加互斥?

例如:我有一个读取功能,通过I2C读取一个传感器的数据.但是也可以从另一个线程调用相同的函数,从而导致可能的并发访问.我是否必须在该函数中使用某些静态互斥锁,或者它是否已经在I2C访问函数中?

linux concurrency mutex i2c embedded-linux

7
推荐指数
2
解决办法
4091
查看次数

为什么i2cdetect总是在嵌入式Linux上的RTC上提供UU

我想用C代码而不是"hwclock"shell命令从RTC传递读取信息.

但是,当我使用时i2cdetect,它显示0x68(这是我的RTC从站地址)具有状态"UU",这意味着"跳过了探测,因为该地址当前正由驱动程序使用".在我尝试之后i2cget,它的givng"可能会将地址设置为0x68:设备或资源忙".

所以我在想我的Linux内核是否存在一些问题,它会一直强制从我的RTC读取,或者其他一些原因.

谢谢

linux i2c linux-device-driver embedded-linux

7
推荐指数
1
解决办法
2万
查看次数

SELinux规则适用于Android中的sysfs中的i2c文件

我为我的一个I2C设备创建了内核驱动程序作为可加载模块.驱动程序(/sys/devices/i2c/i2c-0/0-0008/)通过new_device文件实例化在I2C对应文件夹下创建少量sysfs 文件(/sys/devices/i2c/i2c-0/new_device).

Lollipop强制执行SELinux所以我需要为需要访问设备的sysfs文件的应用程序创建规则.主要是系统应用程序(它们属于Android SELinux中platform_app的定义).问题是不允许任何应用程序域中的应用程序写入sysfs文件:

neverallow { appdomain -bluetooth -nfc }
    sysfs:dir_file_class_set write;
Run Code Online (Sandbox Code Playgroud)

所以我决定专门为我的设备创建文件上下文:

file_context:

/sys/devices/i2c-0/0-0008(/.*)?                     u:object_r:sysfs_mydeviceic:s0
Run Code Online (Sandbox Code Playgroud)

结果很有趣:默认驱动程序文件和文件夹(如name和uevent等)获取正确的上下文,但不是由I2C驱动程序的sysfs部分创建的文件:

root@android:/sys/devices/i2c-0/0-0008 # ls -Z
--w--w--w- root     root              u:object_r:sysfs:s0 data
lrwxrwxrwx root     root              u:object_r:sysfs_mydeviceic:s0 driver -> ../../../bus/i2c/drivers/mydevice
-rw-rw-rw- root     root              u:object_r:sysfs:s0 locked
-r--r--r-- root     root              u:object_r:sysfs_mydeviceic:s0 modalias
-r--r--r-- root     root              u:object_r:sysfs_mydeviceic:s0 name
drwxr-xr-x root     root              u:object_r:sysfs_mydeviceic:s0 power
-rw-rw-rw- root     root              u:object_r:sysfs:s0 protection
-rw-rw-rw- root     root              u:object_r:sysfs:s0 state
lrwxrwxrwx root     root              u:object_r:sysfs_mydeviceic:s0 subsystem -> ../../../bus/i2c
-rw-r--r-- root     root              u:object_r:sysfs_mydeviceic:s0 uevent
Run Code Online (Sandbox Code Playgroud)

我正在寻求帮助如何解决这个问题:如果我仍然希望将sysfs上下文转换为sysfs_mydeviceic以获取其余文件,那么如何做到这一点?或者是否有其他方法可以让应用程序写入sysfs文件?

android selinux i2c linux-kernel sysfs

7
推荐指数
1
解决办法
1685
查看次数

用于Beagle Bone Black的I2C Slave驱动程序

我想在从机模式下使用Beagle Bone Black上的I2C总线.通过搜索,随机帖子的评论部分会提出问题,但从未回答是否可能.

它似乎使用从属模式I2C并不是Linux中的常见需求,但我在Android版本中找到了这个示例:https://android.googlesource.com/kernel/tegra/+/android-tegra-flounder-3.10-lollipop -release/drivers/i2c/i2c-slave.c和linux kernal网站上的这个文件:https://www.kernel.org/doc/Documentation/i2c/slave-interface.

我正在使用Debian Wheezy发行版,但无法在Linux内核文档中引用的Android文件或i2c-slave-eeprom驱动程序中找到引用.我只是使用太旧的内核吗?如何生成从模式驱动程序?

linux i2c beagleboneblack

7
推荐指数
1
解决办法
1257
查看次数