at24cxx_dev.c驱动源码:
#include "linux/kernel.h"
#include "linux/module.h"
#include "linux/platform_device.h"
#include "linux/i2c.h"
#include "linux/err.h"
#include "linux/slab.h"
static struct i2c_board_info at24cxx_info = {
I2C_BOARD_INFO("at24c08", 0x50),
};
static struct i2c_client *at24cxx_client;
static int at24cxx_dev_init(void)
{
struct i2c_adapter *i2c_adap;
i2c_adap = i2c_get_adapter(0);
at24cxx_client = i2c_new_device(i2c_adap, &at24cxx_info);
i2c_put_adapter(i2c_adap);
return 0;
}
static void at24cxx_dev_exit(void)
{
i2c_unregister_device(at24cxx_client);
}
module_init(at24cxx_dev_init);
module_exit(at24cxx_dev_exit);
MODULE_LICENSE("GPL");
===================================================================
at24cxx_drv.c驱动源码:
#include "linux/kernel.h"
#include "linux/module.h"
#include "linux/platform_device.h"
#include "linux/i2c.h"
#include "linux/err.h"
#include "linux/slab.h"
#include "linux/fs.h"
#include "asm/uaccess.h"
static int major;
static struct class *class;
static struct i2c_client *at24cxx_client;
// 传入: buf[0] : addr
// 输出: buf[0] : data
static ssize_t at24cxx_read(struct file * file, char __user *buf, size_t count, loff_t *off)
{
unsigned char addr, data;
copy_from_user(&addr, buf, 1);
data = i2c_smbus_read_byte_data(at24cxx_client, addr);
copy_to_user(buf, &data, 1);
return 1;
}
// buf[0] : addr
// buf[1] : data
static ssize_t at24cxx_write(struct file *file, const char __user *buf, size_t count, loff_t *off)
{
unsigned char ker_buf[2];
unsigned char addr, data;
copy_from_user(ker_buf, buf, 2);
addr = ker_buf[0];
data = ker_buf[1];
printk("addr = 0xx, data = 0xx\n", addr, data);
if (!i2c_smbus_write_byte_data(at24cxx_client, addr, data))
return 2;
else
return -EIO;
}
static struct file_operations at24cxx_fops = {
.owner = THIS_MODULE,
.read = at24cxx_read,
.write = at24cxx_write,
};
static int __devinit at24cxx_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
at24cxx_client = client;
//printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
major = register_chrdev(0, "at24cxx", &at24cxx_fops);
class = class_create(THIS_MODULE, "at24cxx");
device_create(class, NULL, MKDEV(major, 0), NULL, "at24cxx"); // /dev/at24cxx
return 0;
}
static int __devexit at24cxx_remove(struct i2c_client *client)
{
//printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
device_destroy(class, MKDEV(major, 0));
class_destroy(class);
unregister_chrdev(major, "at24cxx");
return 0;
}
static const struct i2c_device_id at24cxx_id_table[] = {
{ "at24c08", 0 },
{}
};
// 1. 分配/设置i2c_driver
static struct i2c_driver at24cxx_driver = {
.driver = {
.name = "100ask",
.owner = THIS_MODULE,
},
.probe = at24cxx_probe,
.remove = __devexit_p(at24cxx_remove),
.id_table = at24cxx_id_table,
};
static int at24cxx_drv_init(void)
{
// 2. 注册i2c_driver
i2c_add_driver(&at24cxx_driver);
return 0;
}
static void at24cxx_drv_exit(void)
{
i2c_del_driver(&at24cxx_driver);
}
module_init(at24cxx_drv_init);
module_exit(at24cxx_drv_exit);
MODULE_LICENSE("GPL");
=====================================================================
i2c_test.c测试程序:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/types.h"
#include "sys/stat.h"
#include "fcntl.h"
// i2c_test r addr
// i2c_test w addr val
void print_usage(char *file)
{
printf("%s r addr\n", file);
printf("%s w addr val\n", file);
}
int main(int argc, char **argv)
{
int fd;
unsigned char buf[2];
if ((argc != 3) && (argc != 4))
{
print_usage(argv[0]);
return -1;
}
fd = open("/dev/at24cxx", O_RDWR);
if (fd < 0)
{
printf("can't open /dev/at24cxx\n");
return -1;
}
if (strcmp(argv[1], "r") == 0)
{
buf[0] = strtoul(argv[2], NULL, 0);
read(fd, buf, 1);
printf("data: %c, %d, 0x%2x\n", buf[0], buf[0], buf[0]);
}
else if ((strcmp(argv[1], "w") == 0) && (argc == 4))
{
buf[0] = strtoul(argv[2], NULL, 0);
buf[1] = strtoul(argv[3], NULL, 0);
if (write(fd, buf, 2) != 2)
printf("write err, addr = 0xx, data = 0xx\n", buf[0], buf[1]);
}
else
{
print_usage(argv[0]);
return -1;
}
return 0;
}
上一篇:Tiny210字符设备驱动的另外一种写法
下一篇:Tiny210驱动之虚拟网卡驱动
推荐阅读
史海拾趣
随着公司规模的扩大和产品线的丰富,Ark-Les Connectors公司开始积极寻求市场拓展。公司制定了针对不同区域和行业的市场拓展策略,通过参加国际电子展会、建立销售网络、开展合作伙伴计划等方式,不断扩大品牌影响力。同时,公司还根据市场需求调整产品策略,推出定制化解决方案,满足不同客户的个性化需求。这些举措使得Ark-Les的市场占有率稳步提升,公司业绩也实现了稳步增长。
在过去的六年里,ABLIC实现了高盈利,这得益于其不断创新的产品线和市场策略。为了进一步拓展业务,ABLIC将目光投向了欧洲市场。欧洲作为全球电子产业的重要区域,对于模拟半导体的需求持续增长。ABLIC凭借其在小型、低功耗和精确模拟半导体产品方面的优势,积极在欧洲市场寻求合作机会,为公司的长远发展奠定了坚实基础。
All Sensors在传感器技术领域一直保持着世界领先的地位。公司掌握着核心的MEMS传感器技术,如独有的CoBeam2 TM传感器技术等。这些技术的应用使得All Sensors的传感器在精度、稳定性和寿命等方面都达到了行业领先水平。同时,公司还不断投入研发,推出更多创新产品,满足不断变化的市场需求。
在追求经济效益的同时,aconno公司也积极履行社会责任,致力于实现可持续发展。公司注重环保和节能,采用环保材料和工艺,减少生产过程中的污染排放。此外,aconno还积极参与社会公益事业,为弱势群体提供帮助和支持。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。
以上便是关于aconno公司在电子行业中发展起来的5个相关故事。这些故事展示了aconno在创新、品质、市场、人才和社会责任等方面的努力和成就,为公司的长远发展奠定了坚实的基础。
经过多年的发展,明波通信在技术和市场上都取得了显著成绩。为了进一步推动公司的发展,明波通信成功在新三版上市。这一举措不仅为公司筹集了更多的发展资金,也提升了公司的品牌影响力和市场竞争力。上市后的明波通信,在资本市场上展现出了强劲的发展势头。
自成立以来,世纪金光始终注重科研实力的积累。公司积极承担国家科研任务,已转接和直接承担国家科研任务80多项。在这些科研项目中,世纪金光取得了丰硕的成果,其中12项成果处于国内同类技术领先水平,5项成果达到国际先进水平。这些成果的取得不仅提升了公司的技术水平,也为公司在半导体领域的竞争提供了有力支撑。
使用VxWorks时出现了问题,请教各位,给点儿建议!cpu是MPC862 自己编了个小程序,在Tornador里结合VxWorks一起. 程序很简单,就是读存储器! xd0 = *(unsigned int *)(SDRAM_ADR); xd1 = *(unsigned int *)(BOOTFLASH_ADR); xd2 = *(unsigned short int *)(FLASH_ADR); 我的存储器有三种,一个是SDRAM,32位;一 ...… 查看全部问答∨ |
|
热地:开关电源无需使用变压器,其开关电路的“地”和市电电网有关,既所谓的“热地”,它是带电的 冷地:由于开关电源的高频变压器将输入、输出端隔离;又由于其反馈电路常用光电耦合、既能传送反馈信号又将双方的“地”隔离;所以输出端的地称之 ...… 查看全部问答∨ |
|
关于IAR4.42和STM32疑难杂症(已解决.使用IAR5.30) 请各位大虾诊断!开发平台 (IAR4.42(带补丁)+ JLINK + STM32 + uCOS-II v2.86)写的源代码在自己的PC上运行很正常, 但把整个工程到其他两个同事的PC上都出现了同一个问题!系统中有一个TIM6的定时中断, ...… 查看全部问答∨ |
STM32101VCT6SRAM(62256)cpld7128lcd12232测试版电路 attach]20052[/attach]原理图 这个是62256的电路,贴出来 下载 (950.99 KB) 2010-3-26 10:05 电路描述:FSMC_NADV经非门后接573的锁存脚,FSMC_NE1接62256的片选/CS,FSMC_NOE接62256的/OE,FSMC_NOE接62256的/WE STM ...… 查看全部问答∨ |
本帖最后由 dontium 于 2015-1-23 11:43 编辑 本帖主要回顾集成运放在电路中的使用,即集成运算放大电路,前两贴作为此贴的基础,我采用循序渐进的阐述方法 1.F007放大电路 F007是通用型集成运放,它由正负15V两路电源供电。从+ ...… 查看全部问答∨ |
|
我是一个新人,对飞思卡尔单片机使用的不是很熟,最近在使用飞思卡尔128单片机和nrf905之间做一个无线传输的小协议,选择飞思卡尔为主机模式,并且作为接收终端,用于接收我的发送数据。我的发送端是用51做到已经好使了,没有问题了(发送端暂且不 ...… 查看全部问答∨ |
请求 继续团购 MSP430 LaunchPad MSP-EXP430G2 25元不用包邮啊 请求 继续团购 MSP430 LaunchPad MSP-EXP430G2 25元不用包邮啊 30元 也可以试试 [ 本帖最后由 ppiicc 于 2012-5-3 22:53 编辑 ]… 查看全部问答∨ |