没有合适的资源?快使用搜索试试~ 我知道了~
i2c协议的各个标志位,设备做为i2c的从机时,如何实现
资源推荐
资源详情
资源评论
信号线:SDA SCK;
起始位:在SCK为高电平时,SDA拉出一个下降沿;
停止位:在SCK为高电平时,SDA拉出一个上升沿:
数据变化:在SCK的下降沿,SDA允许变化;
数据采样:在SCK的上升沿,SDA进行采样;
从机应答:在主机发送8bit数据后,放弃SDA;丛机将SDA拉低一个时钟;
主机应答:在主机接受到8bit数据后,主机将SDA拉低一个时钟;
不应答:应答位为1;
bit流:先高位,后低位;
I2C主机实现:IO口模拟,硬件控制器等网上例子很多;
I2C从机实现:
1,IO口模拟:IO口要配置成电平中断或边沿中断,要分辨清楚各条件,同时要处理接受到的数据;
难度稍大;
2,硬件控制器:通讯部分,硬件控制已经处理好,主要需要解析接受的命令字,如:
typedef struct _slave_device_t {
/** PageAddress of the slave device*/
uint8_t cmd;
/** Offset of the memory access*/
uint8_t epprom_addr;
/** Read address of the request*/
uint8_t acquire_address;
uint8_t data_offset;
uint8_t mag_count[2];
/** Memory buffer*/
uint8_t epprom_mem[10];
/**result data*/
int8_t out_data[6];
int8_t acc_data[6];
int8_t mag_data[6];
起始位:在SCK为高电平时,SDA拉出一个下降沿;
停止位:在SCK为高电平时,SDA拉出一个上升沿:
数据变化:在SCK的下降沿,SDA允许变化;
数据采样:在SCK的上升沿,SDA进行采样;
从机应答:在主机发送8bit数据后,放弃SDA;丛机将SDA拉低一个时钟;
主机应答:在主机接受到8bit数据后,主机将SDA拉低一个时钟;
不应答:应答位为1;
bit流:先高位,后低位;
I2C主机实现:IO口模拟,硬件控制器等网上例子很多;
I2C从机实现:
1,IO口模拟:IO口要配置成电平中断或边沿中断,要分辨清楚各条件,同时要处理接受到的数据;
难度稍大;
2,硬件控制器:通讯部分,硬件控制已经处理好,主要需要解析接受的命令字,如:
typedef struct _slave_device_t {
/** PageAddress of the slave device*/
uint8_t cmd;
/** Offset of the memory access*/
uint8_t epprom_addr;
/** Read address of the request*/
uint8_t acquire_address;
uint8_t data_offset;
uint8_t mag_count[2];
/** Memory buffer*/
uint8_t epprom_mem[10];
/**result data*/
int8_t out_data[6];
int8_t acc_data[6];
int8_t mag_data[6];
资源评论
pengzhenck2
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功