当初我用了两天的时间搞懂了赛普拉斯的Psoc 4000芯片作为iic从设备的通信,现在简单介绍一下怎么使用。

先说下我手上的开发套件,这是一块CY8CKIT-042的开发板和一个MiniProg3仿真器。

开发板自带一个仿真电路,MiniProg3的主要作用不是用于仿真,而是用于打开Bridge Control Panel时候作为RS232转iic的转换器。

本文主要是介绍IDE里面的DEMO,"SCB_EzI2cCommSlave".

DEMO的打开不做介绍。

主要说说工程里面的每个函数的调用,TopDesign.cysch面板里面调用了EZI2C组件

如图,DEMO默认将芯片的IIC地址设置为0x10,注意IIC的地址为7位,第八位为读写位,在使用示波器或者逻辑分析仪的时候注意辨别。

然后再介绍一下这个DEMO的通信协议,下面是TopDesign.cysch的截图,

图中介绍了iic主设备与芯片通信时候的一些命令,发送CMD_SET_OFF 的时候,关闭所有的灯,发送CMD_SET_RED 的时候,发送红灯,其他命令如图。下面讲代码的时候会具体解释怎么发送命令,图中的LED 控制方式是通过GPIO发送高低电平来使LED灯亮灭的。

下面是主代码,关于代码的解释我直接写在代码区

#include <main.h>

/* EZI2C slave buffer for write and read */
uint8 ezI2cBuffer[BUFFER_SIZE] = {PACKET_SOP, STS_CMD_FAIL, PACKET_EOP, \
                                  PACKET_SOP, STS_CMD_FAIL, PACKET_EOP};

int main()
{
    uint8 status = STS_CMD_FAIL;

RGB_LED_OFF;

/* Setup buffer and start EZI2C slave (SCB mode) */
    EZI2C_EzI2CSetBuffer1(BUFFER_SIZE, READ_ONLY_OFFSET, ezI2cBuffer);
    EZI2C_Start();

CyGlobalIntEnable;

for(;;)
    {
        /* Write complete: parse packet */
        if (0u != (EZI2C_EzI2CGetActivity() & EZI2C_EZI2C_STATUS_WRITE1))
        {
            /* Check start and end of packet markers */
            if ((ezI2cBuffer[PACKET_SOP_POS] == PACKET_SOP) &&
                (ezI2cBuffer[PACKET_EOP_POS] == PACKET_EOP))
            {
                status = ExecuteCommand(ezI2cBuffer[PACKET_CMD_POS]);
            }

/* Update buffer with status */
            ezI2cBuffer[PACKET_STS_POS] = status;
            status = STS_CMD_FAIL;
        }

/* Buffer is always available to be read */
    }
}

从代码来看,首先要定义一个数组,该数组作为iic读写的一个缓存区,也可以理解为是寄存器区。

EZI2C_EzI2CSetBuffer1();这个函数是设置iic缓存数组的,有三个形参,第一个参数用于指定数组长度,第二个参数用于指定可以操作的数组边界范围,第三个参数为指定数组。

EZI2C_Start();这个函数用于启动组件,主要是启动EZiic中断,注意,该中断没有开启FIFO。

接下来通过判断EZI2C_EzI2CGetActivity()这个函数的返回值,查看当前EZiic时是否处于活动状态,该函数的返回值有6个,其中EZI2C_EZI2C_STATUS_WRITE1意思为是否接受完成的意思。

主要就是通过这个函数的返回值判断去决定该芯片是作为主设备还是从设备。

然后通过判断返回值,确认是否接受完成,比较接收的数据是否正确,这里的校验需要自己写,可以仿照demo的建立一个简单的帧结构,然后发送命令获得反馈。

举个简单的栗子,关于这个wiget,我是使用它来做从设备的,做为从设备的时候,代码很简单,只要将相应的数据放到iic缓冲数组里面就可以了,0地址就是ezI2cBuffer【0】,10地址就是ezI2cBuffer【10】,不用做特别的操作,只要把数据放到对应的数组就行,在iic中断函数里面会自动应答查询,更新数据直接更新对应的缓

存地址就行。

关于发送数据,请查看wiget的datasheet,也是直接调用一个api即可,如果有疑问直接在博文下方提问,如果我懂的话我会回答的。

写于2017年8月7日

深圳

Psoc Creator入门——EZI2C 通信相关推荐

  1. Psoc Creator 入门——接近感应组件的使用

    关于传感器的设计这里不做介绍,本文仅涉IDE的方面,哪天脑壳坏了再写一篇关于pcb设计的注意事项. 1.打开TopDesign.cysch文件,选择CapSense CSD[v2.50] 2.双击组件 ...

  2. 如何使用PSOC Creator?

    PSOC creator最重要的几步: 1)原理图里放置代码中要用到的控件,可以说这是核心,后面设计都会围绕这个展开.也就是需求是什么,用哪种操作实现什么动作,拖拉几个控件然后生成API和头文件定义等 ...

  3. Cocos Creator入门实战:桌球小游戏

    Cocos Creator入门实战:桌球小游戏 转载请保留原文链接:https://blog.csdn.net/zzx023/article/details/90035153 本篇主要是希望能够通过C ...

  4. Cocos Creator游戏引擎可以支持鼠标吗_Cocos Creator入门实战:桌球小游戏

    本文作者:BigBear 多年游戏行业研发经验 精通Unreal.CocosCreator游戏引擎 参与过多款手游.端游项目的研发 Cocos Creator入门实战:桌球小游戏 本篇主要是希望能够通 ...

  5. ​Cocos Creator入门实战:桌球小游戏

    本文作者:BigBear 多年游戏行业研发经验 精通Unreal.CocosCreator游戏引擎 参与过多款手游.端游项目的研发 Cocos Creator入门实战:桌球小游戏 本篇主要是希望能够通 ...

  6. Vue入门 ---- 组件通信

    ##组件通信: 子组件获取父组件的数据 父组件获取子组件的数据 平行组件之间的通信 vue2.0中用子组件修改父组件数据报错问题 一定需要通过子组件修改父组件 子组件获取父组件的数据 通过子组件中的属 ...

  7. 拖动小游戏html,Cocos Creator 入门篇-拖拽小游戏(一)

    前言 Cocos Creator的官方文档还是非常友好的,有中英文两个版本. [强烈建议] 初学者先把官方文档看一遍.里面还包含了很多demo. 今天主要先带大家简单熟悉一下Cocos Creator ...

  8. cocos creator入门教程(十七)—— creator_h5打包发布优化技巧_android环境搭建与打包发布

    android环境搭建 h5/android 打包发布 h5打包发布 1:引擎模块裁剪,减少引擎体积; 项目----项目设置----模块设置:对于游戏中没有使用到的组件,都不需要勾选.来减少引擎文件的 ...

  9. Cocos Creator入门(一)之查漏补缺

    Cocos Creator开发笔记 前言 小白一个记录一下自己creator(开发版本2.0.x)开发过程中遇到的一些问题以及解决方案,如有错误和不足之处还请大佬指出,文章原创,转载注明出处,本文有部 ...

最新文章

  1. seaborn将图例放置在图像外部并使用move_legend函数将图例(legend)放置在图像的顶部top(多组图例)
  2. 喝不起奶茶,咱就为奶茶店开发个会员积分收银系统
  3. 设计模式中的开闭原则
  4. 【实例记录】在ubuntu上运行python实现与单片机多线程串口通信
  5. 【渝粤教育】国家开放大学2018年春季 0177-22T电机学(二) 参考试题
  6. 前端学习(1854)vue之电商管理系统电商系统之git push后出现错误 ![rejected] master -> master(non-fast-forward) error:failed t
  7. 【转】BYV--有向图强连通分量的Tarjan算法
  8. Linux取消挂载,删除用户及其目录
  9. MTK模拟器编译使用
  10. 阶段3 1.Mybatis_03.自定义Mybatis框架_6.自定义Mybatis的编码-实现基于XML的查询所有操作...
  11. o蓝屏之死---stop:0X000000c5(0x000000c4等系列)---Mr.Zhang
  12. 关于我2021腾讯暑期实习一面一波流这件事以及反思
  13. linux 汇编 变址寻址,【计组】偏移地址、段地址和寻址方式
  14. 微信JS-SDK实现自定义分享功能,分享给朋友,分享到朋友圈及QQ自定义分享--微信分享
  15. MPAndroidchart自定义样式二在柱状图上显示文本和间断式显示柱状图
  16. 服务器强制关机会有什么影响,真相揭秘:强制关机对电脑硬件伤害大吗?
  17. 配F-RCN遇到的问题(hdf5.h: 没有那个文件或目录)及解决
  18. android第三方上传文件,安卓和苹果终于打通!互传文件无需借助第三方,一碰就能传...
  19. 爱死Intellij Idea 01
  20. 丁香园php岗_你为什么从丁香园离职?

热门文章

  1. 解决微软Edge浏览器和IE浏览器下载无反应的问题
  2. 大家好!我是刘伦斯,一个喜欢书法、摄影的计算机童鞋
  3. MacOS Ventura 13.0 Beta2 (22A5286j) 带 OC 0.8.2 三分区原版黑苹果镜像
  4. 并发编程面试宝典(内含69道常问面试题及答案解析)
  5. 第十四届蓝桥杯模拟赛第一期试题【Java解析】
  6. 全球博士Talk NeurIPS 2022 预讲会完美收官,27位博士生共话机器学习前沿研究
  7. RealView 应用
  8. Android 悬浮窗口(及解决6.0以上无法显示问题)
  9. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Gavin大咖免费公益课程Rasa Paper论文解析核心版
  10. 如何使用KMS(2)