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

news/2025/1/13 5:56:10/

蓝牙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:个人学习笔记,仅供参考)
实现效果如下:
在这里插入图片描述


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

相关文章

蓝牙BLE芯片PHY6222之OTA

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

如何修改Jupyter Notebook的默认目录和默认浏览器

一、修改默认目录 Jupyter Notebook的文件默认保存目录是C:\Users\Administrator&#xff0c;默认目录可在黑窗口中查看&#xff0c;如下图所示&#xff1a; 为了方便文档的管理&#xff0c;可将默认目录修改成自己想保存的地方。修改方法如下&#xff1a; 1、找到config文件 …

前端适配笔记本缩放125%,150%导致页面错乱问题

由于前端在开发时使用的都是标准ui设计图&#xff0c;基本都是按照所以1920*1080&#xff0c; 而小屏幕笔记本由于分辨率高&#xff0c;所以导致的显示元素变小&#xff0c;因此很多笔记本的默认显示都是放大125%或者150%。 如果页面比较简单就让多余的空白单边扩展&#xff0c…

台式机计算机型号怎么查,电脑配置怎么查询?笔记本台式机查询电脑配置的四种方法...

电脑配置怎么查询&#xff1f;虽然说现在网络非常的发达&#xff0c;但是并不是每个人都是电脑专家&#xff0c;还有一些不怎么接触电脑的小白用户&#xff0c;对于电脑配置怎么查询并不了解。今天智能手机网就为大家带来了电脑配置查询的具体方法&#xff0c;一起来瞧一瞧吧。…

查看电脑配置信息

在开始菜单的 “运行” 输入 dxdiag 后&#xff0c;点击确定&#xff08;或者快捷键winR&#xff09; 进入下面这个窗口&#xff0c;加载完后&#xff0c;点击 “保存所有信息”&#xff0c;在DxDiag.txt里可以查看本电脑的品牌&#xff08;System Manufacturer&#xff09;、型…

cmd命令怎么查看电脑配置?

cmd命令是一种非常实用的命令&#xff0c;可以帮助用户完成一些操作。cmd命令还能查看电脑配置&#xff0c;要怎么操作呢&#xff1f;今天小编为大家带来的就是cmd命令查看电脑配置的操作方法。 如何用cmd命令查看电脑配置&#xff1f; 1、首先按下快捷键“winr”打开运行。 2、…

Hadoop集群部署

首先在Master节点解压文件&#xff0c;进入Hadoop的目录&#xff0c;我这里下载的是hadoop-2.7.7。 解压后的文件目录是 /home/yellow/hadoop-2.7.7。 master节点的主机名为master。 1. 配置core-site.xml&#xff08;设置NameNode的位置&#xff09; <configuration>…

路由器上的usb接口有什么用_车载USB接口越充电量越低,原来你用错了

很多车主都会在车里备一条充电线&#xff0c;有时候手机没电了可以插在车载USB接口上给手机充电&#xff0c;其实这里有个误区&#xff0c;并不是所有的USB接口都适合给手机充电。 大部分车上的都是数据传输接口 USB实际上是一种数据传输规范&#xff0c;接口共有四个触点&…