nRF52832之硬件I2C

这几天一直在折腾nRF52832的硬件I2C,到了今天终于出现了成果,在此也印证了那句话:“耕耘就有收获”

52832的硬件I2C虽然官方提供了demo,但是自己对I2C通信理解的不够深入,再一个52832的代码也封装的太深了,但是对接口函数没有一个明确的解释(也可以说是我英文太渣,别人写了但是我没看懂。。。),这样对于首次接触nRF产品的人就造成了一定的难度

根据我的开发过程,还是先说明一下I2C的一些相关知识,因为我是先调硬件I2C搞了半天不对头,然后再开发模拟I2C,模拟的成功了再来调试的硬件TWI(也就是52832的硬件I2C,全称估计是two wire interface)

I2C通信需要两条线:SDA,SCL。I2C通信设备有两种角色:master和slave,一般用户开发程序都是开发master端,然后去读写作为slave的外设,比如:eeprom,flash,sensor,display device。

在通信过程中,有两组特殊控制信号:
start :scl为高电平时,sda由高电平变为低电平。
stop: scl为高电平时,sda由低电平变为高电平。

(注意在通信过程中,SCL始终由master控制,这句话在做模拟I2C的时候就显得意义非凡了)

master做写数据操作时,先是SCL和SDA都处于空闲状态(两者都是高电平),然后SDA由高变低(start信号);变低后SCL拉低,这个时候SDA就可以变成想要的电平,高电平代表bit为1,低电平代表bit为0;电平稳定后拉高时钟(拉高的目的是为了让slave读取数据,SCL为高时,SDA要保持不变,slave读取SDA的电平);数据传输完了后要结束:先拉高SCL,然后拉高SDA,然后拉低SDA,一个完整的stop信号完成了。

读数据操作时,start和stop这些时序一样,但是主机要去解析slave传来的数据(电平信号), 拉低SCL,然后释放SDA(即拉高SDA),一段延时之后拉高SCL再去读取SDA电平信号(既然是读取电平,这里必要设置为输入引脚啦),如果是高电平则记下是一个H_bit,否则是L_bit,读取到8位数据后如果还要继续读取则回复ACK,否则回复NCK。
ACK信号是SCL拉低后给SDA一个低电平,然后拉高SCL;
ANK信号是SCL拉低和给SDA一个高电平,然后拉高SCL;

下面以讲解下master 和 slave传输时总体操作:
master向slave写数据,一般slave端写数据都要一个确定的寄存器地址,即你要往这个外设的哪个位置传数据
以eeprom为例,先发送器件地址0xAE(8位数据,高7位是地址,LSB是数据传输方向:0;0代表写,1代表读,可以当做out,in来理解这样容易记住);
然后发送寄存器地址,然后发送数据;
时序上面可以是
start–slave_address_write–register_address–N*Send_data–stop
Send_data每发一个字节,slave会回应一个“CK信号”,如果是ACK则发送数据成功了,否则失败
因为是连续的写数据,因此中间可以没有stop,start

读数据操作,要先写进一个寄存器地址,再传递一个读命令
start–slave_address_write–register_address–start–slave_address_Read–N*Receive_data–stop

发送slave_address_Read前要先re_start,跟start信号一样
Receive_data 是接收数据,这时要去识别SDA电平并且解析数据,作出ACK回应,最后一个字节接收完毕回复NCK信号;然后stop。

下面说明nRF52832的硬件I2C代码问题

nRF留出的API接口是

ret_code_t app_twi_perform(app_twi_t *  \              p_app_twi,app_twi_transfer_t const * p_transfers,\
uint8_t         number_of_transfers,\
void (* user_function)(void)\
)

这个函数调用了app_twi_schedule函数,以此来导入到队列

ret_code_t app_twi_schedule(app_twi_t *                   p_app_twi,
                            app_twi_transaction_t const * p_transaction)

想要调用app_twi_perform函数那么得准备好参数
1、p_app_twi,这是在TWI传输队列里申请一个位置
英文原话是creating an instance of the TWI transaction manager.
2、p_transfers,这是包含了要传输的数组块的一个数组
3、number_of_transfers,这个是你传输数据块的个数
4、user_function,一个用户的回调函数的函数指针,数据块传输完了API内部会调用这个user_function

解释:上面说的数据块的意思就是一个完整的I2C操作需要用到的信息:包含了slave地址,数据传递方向(读或者写),传输的数据data_buffer,数据长度length,有无结束标志(意思就是这团数据传输完了后是否结束通信了)

在官方SDK里面目录
examples\peripheral\twi_master_using_app_twi里打开工程

首先初始化TWI
初始化
数据传输
数据传输

传输的内容
这里写图片描述
注意AT24C02_init_transfers是一个全局变量数组
也就是它的地址是在堆里面的,不会自动释放;这么做的原因是这个数组的地址可能会被多次调用,而放在某个函数里面会造成地址不同造成错误
demo里面有解释

  // [these structures have to be "static" - they cannot be placed on stack
    //  since the transaction is scheduled and these structures most likely
    //  will be referred after this function returns]
      static app_twi_transfer_t const transfers[] =
    {
         AT24C02_READ(&AT24C02_first_page_addr,AT_buffer,5)

    };

注意这里的AT_WRITE_NUMBER数组可以理解为一个数据缓冲区,可以通过改变这个数组的内容然后调用app_twi_perform来发数据出去(把const去掉)

读数据类似,demo用的自定义传输函数
仿写一个
这里写图片描述

这里写图片描述

没想到这篇博客会有这么多人看,写的挺乱的,但是也不想再做修改了~~~写博客真的耗费时间啊~

建议大家去看twi_sensor这个工程
路径:NORDIC官方SDK\nRF52_SDK_11.0.0\examples\peripheral\twi_sensor

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: nRF52832是一款由Nordic Semiconductor开发的低功耗蓝牙系统级芯片(SoC),可以广泛应用于物联网、可穿戴设备、智能家居等领域。其硬件原理图是指将nRF52832的引脚、外设电路和组件等关键元件进行详细标注和连接的图纸。 nRF52832硬件原理图主要包括以下部分: 1. 引脚定义:硬件原理图首先标出了nRF52832芯片的引脚定义,包括主要通信接口(如SPI、I2C、UART)、GPIO接口、电源供电接口等等。这些引脚定义了芯片与其他外部器件的连接关系。 2. 外设电路:硬件原理图还显示了nRF52832芯片连接的各种外设电路,例如晶振电路、电源管理电路、射频电路等。这些外设电路提供了芯片正常工作所需的支持。 3. 组件标注:硬件原理图中会对每个组件进行详细的标注,包括电容器、电阻器、电感、晶体管等等。这些组件构成了整个电路的基本元素,起到了电流控制、信号调节、滤波等功能。 4. 连接关系:硬件原理图清晰地显示了组件之间的连接关系,通过线路的连接和电路板的布局,使得信号能够在不同的电路之间流通,并实现不同功能模块之间的通信。 硬件原理图在设计、开发和问题排查等过程中起到了重要的作用,它为工程师们提供了理解和分析整个电路的便利。同时,硬件原理图也是在研发过程中修改和更新设计的重要工具。通过对硬件原理图的分析,工程师可以更好地理解nRF52832芯片的工作原理,加快开发进度,提高产品的可靠性和性能。 ### 回答2: nRF52832是一款由Nordic Semiconductor公司开发的多协议无线系统芯片,广泛应用于物联网、蓝牙设备以及低功耗应用场景。硬件原理图是指该芯片在设计过程中所使用的电路图,用于展示芯片的内部电路连接和各个外部接口的连接方式。 nRF52832硬件原理图通常由以下几个部分组成: 1. 主芯片连接:展示了nRF52832芯片与其他核心电路部件的连接方式,包括时钟源、电源管理电路、复位电路等。 2. 外设接口:包括与其他外设模块连接的接口,如UART串口、SPI总线、I2C总线等。这些接口可以连接外部传感器、存储器、显示器等外设模块。 3. 蓝牙连接:nRF52832芯片主要用于蓝牙通信,因此硬件原理图中会展示与蓝牙模块相关的连接方式,包括天线连接、射频电路连接等。 4. 电源管理:展示了芯片的电源管理电路,包括电池接口、电池充电电路、低功耗模式切换电路等。这些电路对于实现低功耗运行至关重要。 5. 外部元件:硬件原理图还会展示与nRF52832芯片连接的其他外部电子元件,如电容、电阻、晶振等。 通过硬件原理图,可以清晰地了解nRF52832芯片的内部结构和各个部件之间的连接关系。这对于芯片设计工程师、硬件工程师以及研发人员来说都是非常重要的参考资料。此外,硬件原理图还可以帮助检查设计是否符合规范,以及对于故障排查和维修也有很大的帮助作用。 总之,nRF52832硬件原理图是展示该芯片内部电路连接和外部接口连接方式的重要参考资料,对于芯片设计和应用具有重要的意义。 ### 回答3: nRF52832是一款由挪威公司诺德公司开发的低功耗蓝牙系统级芯片(SoC)。硬件原理图是指该芯片的布线和电路连接图,用于描述芯片的硬件结构和电路设计。 nRF52832芯片的硬件原理图涵盖了多个功能模块,包括处理器核心、存储器、外设等。它采用了ARM Cortex-M4内核,主频达到64MHz,具有强大的处理能力。此外,芯片有256KB的闪存和32KB的RAM,用于存储程序和数据。 在外设方面,nRF52832集成了多种接口和传感器。它支持蓝牙低能耗(Bluetooth Low Energy)和2.4GHz射频通信,并具备蓝牙5.0和NFC的功能。此外,芯片还有多个通用IO引脚,可以连接外部设备和传感器。 nRF52832硬件原理图还包含了电源管理电路、时钟电路等。为了保证芯片的低功耗特性,它采用了多种节能技术,如低功耗模式、功耗优化设计等。电源管理电路用于稳定芯片的供电电压和电流。 除了上述组成部分,nRF52832硬件原理图还可能包括其他辅助电路和连接器。例如,调试接口(如JTAG或SWD接口)可用于软件调试和开发。此外,可能还有外部晶振和天线连接器等。 总的来说,nRF52832硬件原理图是该芯片设计的基础图纸,它展示了芯片的主要硬件组成部分和电路连接方式。通过理解硬件原理图,可以更好地了解该芯片的功能和性能,并进行相关应用的设计和开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值