蓝牙BLE芯片PHY6222之I2C主从通信

  • 开发环境
  • I2C主机
  • I2C从机
  • 注意事项

开发环境

1.PHY6222开发板
2.SDK版本以及路径:SDK\release_bbb_sdk-PHY62XX_SDK_3.0.9\example\peripheral\gpio
3.硬件连接
SDA  GPIO_P33----------GPIO_33
CLK  GPIO_P34----------GPIO_34
     GND----------GND

I2C主机

     //初始化hal_gpio_pin_init(I2C_MASTER_SDA,IE);hal_gpio_pin_init(I2C_MASTER_CLK,IE);hal_gpio_pull_set(I2C_MASTER_SDA,STRONG_PULL_UP);hal_gpio_pull_set(I2C_MASTER_CLK,STRONG_PULL_UP);hal_i2c_pin_init(I2C_0, I2C_MASTER_SDA, I2C_MASTER_CLK);//使用I2C0,100K的频率,主机地址0x10master_pi2c=hal_i2c_init(I2C_0,I2C_CLOCK_100K);//I2C_CLOCK_400K);if(master_pi2c==NULL){LOG("I2C master init fail\n");}else{LOG("I2C master init OK\n");} //每3秒向从机发送一次数据osal_start_reload_timer(key_TaskID, KEY_I2C_READ_DATA_EVT, 3000);---------------------------------------------------------------------------------------
//事件处理函数,从机地址slave_i2c_addr为0x20if( events & KEY_I2C_READ_DATA_EVT){int res;static int i=0;i++;LOG("i==%d\n",i);res=I2CWrite(master_pi2c,I2C_TX_data,I2C_MASTER_SEND_DATA_LEN,slave_i2c_addr);if(res==PPlus_SUCCESS)LOG("I2C  Master  send data   ok\n");return (events ^ KEY_I2C_READ_DATA_EVT);}

I2C从机

 //从机初始化hal_gpio_pin_init(I2C_SLAVE_SDA,IE);hal_gpio_pin_init(I2C_SLAVE_CLK,IE);hal_gpio_pull_set(I2C_SLAVE_SDA,STRONG_PULL_UP);hal_gpio_pull_set(I2C_SLAVE_CLK,STRONG_PULL_UP);I2C_Slave_Init();
{I2C_Slave_Parameter *I2C_Slave_cfg = (I2C_Slave_Parameter *)osal_mem_alloc(sizeof(I2C_Slave_Parameter));osal_memset(I2C_Slave_cfg,0,sizeof(I2C_Slave_Parameter));// config i2c slave parameterI2C_Slave_cfg->id = I2C_Slave_Module;I2C_Slave_cfg->workmode = Slave;I2C_Slave_cfg->AddressMode = I2C_ADDR_7bit;//从机中断源I2C_Slave_cfg->IRQ_Source = (I2C_MASK_TX_ABRT | I2C_MASK_RD_REQ | I2C_MASK_RX_FULL | I2C_MASK_RX_DONE |I2C_MASK_RX_UNDER);//| I2C_TX_EMPTY_Evt);I2C_Slave_cfg->RX_FIFO_Len = I2C_RX_TL_CNT;I2C_Slave_cfg->Tx_FIFO_Len = I2C_TX_TL_CNT;I2C_Slave_cfg->Slave_Address =0x20;//0x20;// chendy add 20200909 I2C_IC_DEFAULT_ADDR;I2C_Slave_cfg->SCL_PIN = I2C_SLAVE_CLK;I2C_Slave_cfg->SDA_PIN = I2C_SLAVE_SDA;I2C_Slave_cfg->evt_handler = hal_i2c_slave_evt_hdl;ret = Hal_I2C_Slave_Init(I2C_Slave_cfg,&I2C_Slave_Handle);if( ret != PPlus_IIC_SUCCESS ){I2C_Slave_Handle = PPlus_INVALID_HANDLE;LOG("I2C Slave Init Failure %d \n",ret);}else{LOG("I2C Slave Init Success111 , handle:%d \n",I2C_Slave_Handle);}osal_mem_free(I2C_Slave_cfg);
}   //从机中断处理
void hal_i2c_slave_evt_hdl(I2C_Evt_t *pev)
{uint16_t conn_hdl;LOG("i2c s handle type=%x,len=%x\n",pev->type,pev->len);switch(pev->type){case I2C_RX_UNDER_Evt://IC_RXFLRbreak;case I2C_RX_OVER_Evt:break;case I2C_RX_FULL_Evt://I2C_slave_rx_handle(I2C_RX_TL_CNT);hal_i2c_slave_rx_full_handler();osal_set_event(key_TaskID,KEY_I2C_READ_DATA_EVT);break;
.........

特别需要注意的是:PHY6222的硬件I2C在读写sensor的时候地址会自动左移,意思是:比如sensor的地址是0x89,那此时读写数据传入的地址应该是0x44,01000100<<1 等于 10001000,最后一位是读写位;

注意事项

1.建议主从机要共地,且芯片外部SDA和CLK必须上拉电阻(提高驱动能力,我上拉的是4.7K电阻)
2.在jump_table.c里的 jump_table_base函数里加上I2C的中断申请
3.PHY6222作为主机读写sensor时(如SC7A20),不能单单从波形分析,注意sensor手册里规定相应的地址,同时是否与原理图相对应
4. CFG_SLEEP_MODE=PWR_MODE_NO_SLEEP 不然初始化完就进入睡眠了
5. 建议项目工程不能通信的时,可以拿此例程测试看对比是否是硬件,或者软件的主从某一方有问题

PS:个人学习笔记,仅供参考)
实现效果如下:

蓝牙BLE芯片PHY6222之I2C主从通信相关推荐

  1. 蓝牙BLE芯片PHY6222之烧录以及调试

    蓝牙BLE芯片PHY6222之烧录调试 一. 环境 二. 接线 三. 操作 四. J-LINK调试 五. 烧录失败分析 前言:个人学习笔记,不做商业用途. 望每个工程师配得起工程师之名,有独立解决,分 ...

  2. 蓝牙BLE芯片PHY6222之GPIO按键操作

    蓝牙BLE芯片PHY6222之GPIO按键操作 按键唤醒 IO初始化 按键中断唤醒回调 短按&长按触发的事件 按键唤醒 IO初始化 void key_init(void) {uint8 i;k ...

  3. 蓝牙BLE芯片PHY6222之OTA

    蓝牙BLE芯片PHY6222之OTA 什么是OTA 将OTA驱动移植到应用代码 一.SLB移植 用PhyPlusKit烧录支持SLB的文件 支持SLB的OTA bin文件的制作 使用APP进行SLB升 ...

  4. 蓝牙技术|智能可穿戴设备中的蓝牙BLE芯片

    1975 年,第一块计算器手表问世,智能可穿戴设备开始进入我们的生活.随着技术的发展,越来越多的智能可穿戴设备出现在我们的生活中,比如智能手环.智能眼镜.智能织物等. 这些智能可穿戴设备可以让人们更加 ...

  5. STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang Ⅰ.写在前面 ...

  6. 蓝牙BLE芯片|伦茨科技智能电容笔芯片-ST17H65

    随着平板电脑的流行,有不少厂商都投入到了电容笔的开发当中,现在的电容笔不仅在精度上有了提高,甚至在笔触和压感上的研究都有进步. 电容笔是利用导体材料制作的具有导电特性.用来触控电容式屏幕完成人机对话操 ...

  7. KT6368A国产蓝牙BLE芯片驱动程序硬件注意事项

    目录 1.1 简介 KT6368A芯片是一款支持蓝牙双模的纯数据芯片,蓝牙5.1版本.芯片的亮点在超小尺寸,超级价格.以及简单明了的透传和串口AT控制功能.大大降低了嵌入蓝牙在其它产品的开发难度和成本 ...

  8. 基于ARM Cortex M0 核心的低功耗蓝牙BLE芯片

    MS1793S 是一款基于ARM Cortex M0 核心的低功耗蓝牙芯片,射频采用2.4GHz ISM 频段的频率,2MHz 信道间隔,符合蓝牙规范.MS1793S使用高性能的ARM®Cortex® ...

  9. CC2541F256RHAR 低功耗蓝牙BLE芯片

    CC2541 是一款针对低能耗以及私有 2.4GHz 应用的功率优化的真正片载系统 (SoC) 解决方案. 它使得使用低总体物料清单成本建立强健网络节点成为可能. CC2541 将领先 RF 收发器的 ...

最新文章

  1. java手机游戏模拟器下载_Java手机游戏模拟器
  2. Centos7环境下etcd集群的搭建
  3. java 输入输出头文件_引入的标准头文件与标准输出以及FOR循环
  4. 洛谷P4383 林克卡特树
  5. xss挖掘思路分享_新手指南 | permeate靶场漏洞挖掘思路分享
  6. 人工学院2卡顿_浙大宁波理工学院就业率怎么样 | 就业情况 | 前景好的专业
  7. 苹果春季发布会:绝不玩别人玩剩下的!
  8. Java学习系列(十一)Java面向对象之I/O流(下)
  9. 通达oa 2013 php解密,通达OA 2011-2013 通杀GETSHELL修复补丁
  10. 手机html5测试苹果八,怎么简单质检你的iPhone手机以及真假判断!
  11. 亚马逊 站内广告数据分析
  12. 如何卸载CAD?怎么把CAD彻底卸载干净重新安装的方法
  13. CumtCTF第二次双月赛Writeup(Web详解)
  14. Oracle MOD函数的使用
  15. VMware模拟网络防火墙配置实验
  16. 005-Sencha Cmd 5升级指南
  17. 淘宝知网查重怎么样?
  18. 网络计算机无法连接打印机,网络打印机无法连接怎么办 网络打印机无法连接教程【详解】...
  19. Excel查找字符串下标(findsearch)
  20. 开心网外挂辅助营销推广工具2010新版!!!

热门文章

  1. typora显示版本过期,请下载最新版本,可是最新版本84块钱,咋办?
  2. 一文读懂直播卡顿优化那些事儿
  3. Jenkins ——你很神气
  4. 第九十一章 SQL函数 LOWER
  5. lower_bound,upper_bound的第四个参数
  6. 集体封盘,深度回撤,量化私募的高光时刻已不再?
  7. 学生HTML个人网页作业作品~ 个人博客主页空间5页面 ~学生网页设计作业源码(HTML+CSS)
  8. 微软 奥尔良 游戏服务器,去了新奥尔良,才知道是一个城市,别只知道奥尔良烤翅...
  9. MATLAB批量读取航摄相片EXIF信息和GNSS信息以及MATLAB批量经纬度坐标转换空间直角坐标
  10. 深夜十点,400万人在微博泪崩:如果人生太难,就去医院看看