OrangePi3 LTS 驱动开发-i2c通信(一)

news/2024/11/24 6:26:54/

OrangePi3 LTS 驱动开发-at24c02适配

kernel版本:orange-pi-5.10-media
5.1x版本,i2c0默认是关闭的,需要在orangepiEnv.txt中添加overlays=i2c0字样开启i2c0。如果不添加,默认设置为开,需要更改dts中的配置。
1、修改sun50i-h6.dtsi文件,屏蔽以下内容

	// uart3_rts_cts_pins: uart3-rts-cts-pins {// 	pins = "PD25", "PD26";// 	function = "uart3";// };
防止pd25 pd25 用做uart3

2、修改sun50i-h6-orangepi-3-lts.dts文件
添加一下内容

model = "OrangePi 3 LTS";
compatible = "xunlong,orangepi-3-lts", "allwinner,sun50i-h6";aliases {serial0 = &uart0;serial1 = &uart1;serial3 = &uart3;serial9 = &r_uart;i2c0 = &i2c0;spi1 = &spi1;ethernet0 = &emac;};&i2c0 {
clock-frequency = <100000>;
status = "okay";
at24c02@50{compatible = "atmel,24c02";reg = <0x50>;status = "okay";
};
};

compatible = “atmel,24c02”; 是适配驱动中at24.c
0x50 是at24c02 的七位器件地址。

重新编译,替换kernel跟dtb后,查看at24c02相关的节点是否生成。

在这里插入图片描述
在这里插入图片描述

应用层测试app编写。往节点写字符串,然后读出来,打印。

#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>#define EEPROM_FILE_PATH "/sys/bus/nvmem/devices/0-00501/nvmem"
#define EEPROM_SIZE 256 // atc02 只有256个字节大小int earse_eeprom()
{char easre_data[EEPROM_SIZE] = {0};int fd;fd = open(EEPROM_FILE_PATH, O_RDWR);if (fd < 0) {printf("Can't open file %s\r\n", EEPROM_FILE_PATH);return -1;}lseek(fd,0,SEEK_SET);write(fd,easre_data,sizeof(easre_data)); //erase eepromclose(fd);return 0;
}int read_eeprom(char *r_data,int len)
{char easre_data[EEPROM_SIZE] = {0};int fd;size_t size;fd = open(EEPROM_FILE_PATH, O_RDWR);if (fd < 0) {printf("Can't open file %s\r\n", EEPROM_FILE_PATH);return -1;}lseek(fd,0,SEEK_SET);size = read(fd,r_data,len);close(fd);if (size == len)return 0;return -1;    
}int write_eeprom(char *r_data,int len)
{char easre_data[EEPROM_SIZE] = {0};int fd;size_t size;fd = open(EEPROM_FILE_PATH, O_RDWR);if (fd < 0) {printf("Can't open file %s\r\n", EEPROM_FILE_PATH);return -1;}lseek(fd,0,SEEK_SET);size = write(fd,r_data,len);close(fd);if (size == len)return 0;return -1;    
}int main(int argc,char *argv)
{char *test = "hello world,this is from eeprom";char r_data[256] = {0};earse_eeprom();
write_eeprom(test,strlen(test));
read_eeprom(r_data,strlen(test));printf("%s\n",r_data);
return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/345174.html

相关文章

AVC的三种规格

AVC其实就是H.264标准&#xff0c;是由ITU-T和ISO/IEC组成的联合视频组&#xff08;JVT&#xff0c;Joint Video Team&#xff09;一起开发的&#xff0c;ITU-T给这个标准命名为H.264&#xff08;以前叫做H.26L&#xff09;&#xff0c;而ISO/IEC称它为MPEG-4 高级视频编码&…

华为手机pc模式机型_哪些手机型号外接便携显示器能实现PC电脑模式

手机支持PC模式&#xff0c;这个不同于一般的手机投屏功能&#xff0c;基本上实现了手机可以当电脑主机的功能。很多人都要疑问&#xff0c;自己的手机是否支持手机PC模式呢&#xff1f;奥斯曼小编为大家整理了一些支持PC模式手机型号&#xff0c;快来看看你的手机是否有第二系…

【中国传媒大学】史上最全的《电视原理》笔记

第1章电视传像基础 第2章三基色原理与计色系统 第3章彩色电视摄像原理 第4章 彩色电视信号 第6章电视信号数字化基础 第7章 数字视音频压缩编码 第8章-MPEG2系统复用ing-ys 第9章-数字电视信道编码技术-ys 第一章 电视传像基础 视敏特性 实验表明&#xff0c;在明亮环境中&am…

FFmpeg再学习 -- 将 jpeg 转成 mp4

参看&#xff1a;wiki -- ffmpeg 上一篇已讲将了 ffmpeg 的安装说明&#xff0c;接一下来讲一下我们要实现的功能&#xff0c;将 jpeg 转成 mp4. 参看&#xff1a;使用ffmpeg将jpeg转成mp4 参看&#xff1a;FFmpeg and H.264 Encoding Guide 本版本使用的是 ffmpeg-3.3.1 …

全志芯片bsp命名规则

在linux bsp中&#xff0c;allwinner平台统一命名为“sunxi”。即&#xff1a;linux bsp中的“sunxi”可以理解为是allwinner的代称。 如linux/arch/arm目录下的machine命名为“mach-sunxi”&#xff1b; 如linux/driver/video目录下显示驱动命名为“sunxi”&#xff1b; 不同…

canvas像素点获取 —— 拾色器、放大器

原文地址 前言 最近在学习canvas&#xff0c;然后照葫芦画瓢简单实现了几个小demo&#xff0c;跟大家一块学习一下。 主要内容 两个方法&#xff1a;drawImage、getImageData前端图片预览、跨域图片问题 两个方法&#xff1a;drawImage、getImageData drawImage 用法&#xff1…

香橙派Orange Pi 3开发板在Armbian系统下使用SPI的方法

香橙派Orange Pi 3开发板&#xff0c;采用全志H6系统级芯片&#xff0c;同时拥有1GB或2GB LPDDR3 内存&#xff0c;可选8GB EMMC Flash。集成了千兆网&#xff0c;MIC&#xff0c;HDMI等功能接口&#xff0c;拥有4个 USB 3.0接口&#xff0c;另外&#xff0c;板子提供了26pin接…

理解视频格式(一)

一、视频 ① 视频是什么&#xff1f; 大家一开口就是视频制作如何如何。究竟什么是视频&#xff1f;音频比较好理解&#xff0c;就是声音&#xff0c;你录声音、做声音就是音频制作。那视频呢&#xff1f;你拍DV叫视频&#xff0c;你做的电脑动画叫视频吗&#xff1f;…