上一页 1 2 3 4 5 6 7 ··· 11 下一页
摘要: 下面以eeprom用户程序调用ioctl函数的写操作为例追踪IIC子系统的调用过程。eeprom的用户测试是大部分开发板都自带的。看写一个字节数据的eeprom_write_byte函数的定义:int eeprom_write_byte(struct eeprom *e, __u16 mem_addr, __u8 data){ if(e->type == EEPROM_TYPE_8BIT_ADDR) { __u8 buf[2] = { mem_addr & 0x00ff, data }; return i2c_write_2b(e, buf); } el... 阅读全文
posted @ 2013-08-17 21:04 lknlfy 阅读(5956) 评论(0) 推荐(0) 编辑
摘要: 953行,适配器的编号大于MAX_ID_MASK是不行的,MAX_ID_MASK是一个宏,展开后的值为61。957至968行,关于管理小整形ID数的,没怎么了解,略过。974行,调用i2c_register_adapter函数注册IIC适配器,下面是它的定义:00000837 static int i2c_register_adapter(struct i2c_adapter *adap)00000838 {00000839 int res = 0;00000840 00000841 /* Can't register until after driver model init... 阅读全文
posted @ 2013-08-17 20:53 lknlfy 阅读(2008) 评论(1) 推荐(1) 编辑
摘要: 写在前面 由于IIC总线只需要两根线就可以完成读写操作,而且通信协议简单,一条总线上可以挂载多个设备,因此被广泛使用。但是IIC总线有一个缺点,就是传输速率比较低。本文基于Linux-2.6.36版本,说说IIC子系统在Linux中的实现。 借用某书上的IIC子系统的体系结构图: Linux IIC子系统体系结构 下面开始分析IIC子系统。 IIC子系统的初始化在drivers/i2c/i2c-core.c文件中的i2c_init函数中:00001221 static int __init i2c_init(void)00001222 {00001223... 阅读全文
posted @ 2013-08-17 20:37 lknlfy 阅读(4455) 评论(1) 推荐(0) 编辑
摘要: 781行之前没什么好说的,直接看783行,将work投入到工作队列里,然后就返回,在这里就可以回答之前为什么是异步的问题。以后在某个合适的时间里CPU会执行这个work指定的函数,这里是s3c64xx_spi_work函数,看它的定义:00000723 static void s3c64xx_spi_work(struct work_struct *work)00000724 {00000725 struct s3c64xx_spi_driver_data *sdd = container_of(work,00000726 struct s3c6... 阅读全文
posted @ 2013-08-17 20:22 lknlfy 阅读(4930) 评论(0) 推荐(0) 编辑
摘要: 572至574行,分配内存,注意对象的类型是struct spidev_data,看下它在drivers/spi/spidev.c中的定义:00000075 struct spidev_data {00000076 dev_t devt;00000077 spinlock_t spi_lock;00000078 struct spi_device *spi;00000079 struct list_head device_entry;00000080 00000081 /* buffer is NULL u... 阅读全文
posted @ 2013-08-17 20:13 lknlfy 阅读(7218) 评论(0) 推荐(0) 编辑
摘要: 957至962行,一个SPI控制器用一个master来描述。这里使用SPI核心的spi_alloc_master函数请求分配master。它在drivers/spi/spi.c文件中定义:00000471 struct spi_master *spi_alloc_master(struct device *dev, unsigned size)00000472 {00000473 struct spi_master *master;00000474 00000475 if (!dev)00000476 return NULL;00000477 000004... 阅读全文
posted @ 2013-08-17 20:00 lknlfy 阅读(8912) 评论(0) 推荐(0) 编辑
摘要: 写在前面 初次接触SPI是因为几年前玩单片机的时候,由于普通的51单片机没有SPI控制器,所以只好用IO口去模拟。最近一次接触SPI是大三时参加的校内选拔赛,当时需要用2440去控制nrf24L01,从而实现数据的无线传输。nrf24L01是一种典型的SPI接口的2.4GHz无线收发器,当时搞了很久,由于时间比较紧,而且当时根本不熟悉Linux的SPI子系统,最后虽然采用IO口模拟SPI的方式勉强实现了,但是这根本就不符合Linux驱动的编程规范,或者说是在破坏Linux、污染kernel。 根据我个人所知道的,Linux SPI一直是处于被“忽略”的角色,市场上大部分板子在板级文件里都... 阅读全文
posted @ 2013-08-17 19:45 lknlfy 阅读(24254) 评论(1) 推荐(1) 编辑
摘要: 一、概述 学习libusb-win32的使用。使用批量传输方式与USB开发板进行数据读、写操作。上位机使用Qt做界面,使用USB开发板的端点2作为批量传输端点。 二、实现 代码比较简单,直接给出,如下: 1 #include "testlibusb.h" 2 3 //for Tiny6410 4 //#define MY_VID 0x5345 5 //#define MY_PID 0x1234 6 7 //for 51 USB Board 8 #define MY_VID 0x8888 9 #define MY_PID 0x0001 10 11 // Dev... 阅读全文
posted @ 2013-07-22 20:00 lknlfy 阅读(9356) 评论(5) 推荐(2) 编辑
摘要: 主要是在前一篇的基础上,学习libusb-win32的API使用。程序很简单,就是打印指定USB设备的设备描述符(当然其他描述符也是可以的)。 1 #include "testlibusb.h" 2 3 4 #define MY_VID 0x5345 5 #define MY_PID 0x1234 6 7 8 USB::USB() 9 {10 usb_init(); /* initialize the library */11 //usb_set_debug(255);12 usb_find_busses(); /* find all busses */1... 阅读全文
posted @ 2013-07-15 20:25 lknlfy 阅读(4319) 评论(0) 推荐(0) 编辑
摘要: 之前一直找不到适合WIN7下的Tiny6410的USB下载软件,正好这几天开始学习USB,所以打算自己写一个专门用于Tiny6410的WIN7下的USB下载软件。 发现了libusb这个库可以用作无驱USB开发,就是说根本不需要了解Window驱动开发的知识就可以开发USB设备驱动,只需要了解一下USB的相关协议即可。Windows下我几乎不用VS来写程序,或者说我不懂MFC吧,呵呵,所示我用Qt来做界面。好了,进入正题。 首先下载libusb-win32,下载地址:http://sourceforge.net/projects/libusb-win32/files/,注意选择下载的... 阅读全文
posted @ 2013-07-14 21:52 lknlfy 阅读(20106) 评论(9) 推荐(2) 编辑
上一页 1 2 3 4 5 6 7 ··· 11 下一页