一、前言

TWI(Two wire Serial Interface):twi接口是对I2C总线接口的继承和发展,完全兼容I2C总线

Nordic的TWI外设主要分成两类,TWIM(基于EasyDMA的主设备Master) TWIS(基于EasyDMA的从设备Slave)
ps:如有错误,请留言指正,谢谢

二、工作原理

功能特点

  • 兼容I2C总线
  • 可选速率 100kbps/250kbps/400kbps
  • EasyDMA进行RAM数据与寄存器的传输
  • 可映射到任意的GPIO引脚

原理框图

一主多从应用案例
TWI主机可同时挂载多个从机,主机通过从机唯一分配的地址进行寻址访问,总线需加上拉电阻以保证其驱动能力

数据通信过程

写数据

  • TWI主机写数据通过STARTTX任务进行触发,最终通过STOP结束任务
  • 从机的地址寻址成功后,通过TXD.PTR寄存器指向的RAM地址,调制发送数据
  • 发送时可被SUSPEND任务挂起,挂起期间总线会保持,在生效RESUME任务后可继续通信
  • 当发送最后一个字节时,TWIM会产生一个LASTTX事件,必须发出STOP任务结束一次通信(不会自动停止总线通信)
  • 仅通信RESUME释放后才能发送STOP任务

读数据

  • TWI主机读数据通过STARTRX 任务触发,通过STOP借结束任务
  • 读取到的数据将储存到RXD.PTR寄存器指向的RAM地址中,数据接收完成后主机产生一个NACK
  • 挂起任务SUSPEND触发后,将会产生一个SUSPENDED事件,此事件可用于同步软件
  • 当TWI主机准备接收最后一个字节时,会产生一个LASTRX事件
  • TWI master在被挂起时无法停止,因此必须在TWI master恢复后发出STOP任务

三、寄存器

  • SHORTS:循环模式控制,写1使能发送/接收最后字节的LASTTX/LASTRX事件后,自动触发如开启/挂起/结束任务
  • INTEN:中断控制寄存器,写1使能中断,写0禁用中断(按位配置中断STOPPED/ERROR/SUSPENDED/RXSTARTED/TXSTARTED/LASTRX/LASTTX
  • INTENSET:中断使能寄存器,写1有效
  • INTENCLR:中断禁用寄存器,写1有效
  • ERRORSRC:错误状态寄存器,写1清状态
  • ENABLE:TWIM外设使能寄存器
  • PLSEL.SCL:关联SCL时钟引脚,低4位有效
  • PLSEL.SDA:关联SDA数据引脚,低4位有效
  • FREQUENCY:TWI通信速率选择 100k 250k 400k
  • RXD.PTR:接收数据寄存器,指向RXD接收缓存
  • RXD.MAXCNT:接收数据缓存区最大长度
  • RXD.AMOUNT:最近一次数据通信的接收传输字节长度
  • RXD.LIST:EasyDMA列表类型,写1使用arraylist接收缓存,触发START任务时无需更新PTR数据指针寄存器,类似DMA串口中双缓存循环读取
  • TXD.PTR:发送数据寄存器,指向TXD发送缓存
  • TXD.MAXCNT:需要发送数据缓存的最大长度
  • TXD.AMOUNT:最近一次数据通信的发送传输字节长度
  • TXD.LIST:EasyDMA列表类型,写1使用arraylist发送缓存,触发START任务时无需更新PTR数据指针寄存器,类似DMA串口中双缓存循环发送
  • ADDRESS:TWI总线的寻址地址,最低位为读写位

四、相关接口

SPIM的驱动目录在modules\nrfx\drivers\src\nrfx_twim.c

  • nrfx_twim_init:初始化twim,形参nrfx_twim_config_t p_config传入引脚的映射关系与TWI的参数(通信速率、中断优先级);函数指针nrfx_twim_evt_handler_t handler用于定义事件回调(数据的发送与接收)
nrfx_err_t nrfx_twim_init(nrfx_twim_t const *        p_instance,nrfx_twim_config_t const * p_config,nrfx_twim_evt_handler_t    event_handler,void *                     p_context)
  • nrfx_twim_uninit:禁用twim外设,系统进入低功耗的时候可以调用
void nrfx_twim_uninit(nrfx_twim_t const * p_instance)
  • nrfx_twim_xfer:数据传输接口,形参nrfx_twim_xfer_desc_t const * p_xfer_desc定义了发送TX与接收RX的缓存与长度
nrfx_err_t nrfx_twim_xfer(nrfx_twim_t           const * p_instance,nrfx_twim_xfer_desc_t const * p_xfer_desc,uint32_t                      flags)

五、代码实例

打开工程目录 examples\peripheral\twi_master_with_twis_slave.eww,选择pca10040

贴上例程代码

/*
* 初始化TWI master
*/
static ret_code_t twi_master_init(void)
{ret_code_t ret;const nrf_drv_twi_config_t config ={.scl                = TWI_SCL_M,//选择pin脚.sda                = TWI_SDA_M,.frequency          = NRF_DRV_TWI_FREQ_400K,//通信速率.interrupt_priority = APP_IRQ_PRIORITY_HIGH,//优先级.clear_bus_init     = false};ret = nrf_drv_twi_init(&m_twi_master, &config, NULL, NULL);//调用配置驱动if (NRF_SUCCESS == ret){nrf_drv_twi_enable(&m_twi_master);//使能总线}return ret;
}/*
* main接口,程序主要是通过软件模拟了从机与主机的通信
*/
int main(void)
{ret_code_t err_code;bool epprom_error = 0;/* Initialization of UART */bsp_board_init(BSP_INIT_LEDS);APP_ERROR_CHECK(NRF_LOG_INIT(NULL));/* Initializing simulated EEPROM */err_code = eeprom_simulator_init();//模拟eeprom twis从机总线初始化APP_ERROR_CHECK(err_code);/* Initializing TWI master interface for EEPROM */err_code = twi_master_init();//主机twim总线初始化APP_ERROR_CHECK(err_code);err_code = nrf_drv_clock_init();//时钟初始化APP_ERROR_CHECK(err_code);nrf_drv_clock_lfclk_request(NULL);err_code = app_timer_init();//定时器初始化APP_ERROR_CHECK(err_code);nrf_drv_uart_config_t uart_config = NRF_DRV_UART_DEFAULT_CONFIG;//串口配置,可以使用串口命令行控制uart_config.pseltxd = TX_PIN_NUMBER;uart_config.pselrxd = RX_PIN_NUMBER;uart_config.hwfc    = NRF_UART_HWFC_DISABLED;err_code = nrf_cli_init(&m_cli_uart, &uart_config, true, true, NRF_LOG_SEVERITY_INFO);APP_ERROR_CHECK(err_code);err_code = nrf_cli_start(&m_cli_uart);//开启命令行cli控制APP_ERROR_CHECK(err_code);/* Welcome message */NRF_LOG_RAW_INFO("TWIS and TWI usage example started.\r\n""You can access simulated EEPROM memory using <eeprom> command.\r\n""Execute: <eeprom -h> for more information or press the Tab button ""to see all available commands.\r\n");/* Main loop */while (1){UNUSED_RETURN_VALUE(NRF_LOG_PROCESS());nrf_cli_process(&m_cli_uart);//处理串口命令if (epprom_error != eeprom_simulator_error_check())//错误状态查询{epprom_error = eeprom_simulator_error_check();if (epprom_error != 0){NRF_LOG_RAW_INFO("WARNING: EEPROM transmission error detected.\r\n""Use 'x' command to read error word.\r\n");}}}
}

Nordic52810入门篇-TWIM串行总线相关推荐

  1. 串行总线技术(一)-串行总线结构(以PCIe为例)

    串行总线技术(一)-串行总线结构(以PCIe为例) 串行总线的出现 在早期的计算机系统中,多数外围设备使用并行总线结构.这些总线包括PCI和PATA(并行ATA).当通信速率较低时,并行总线结构可以设 ...

  2. 高速串行总线设计基础(五)揭秘SERDES高速面纱之多相数据提取电路与线路编码方案

    文章目录 前言 多相数据提取电路 线路编码方案 8B/10B编解码 运行差异(Running Disparity) 控制字符 Comma 检测 加扰技术 参考文献 前言 SERDES可以工作在多吉比特 ...

  3. 高速串行总线设计基础(三)SERDES的通用结构介绍

    文章目录 前言 SERDES的基本构造 SERDES的通用框图 市场上的SERDES或Transceiver展示 Xilinx的Transceiver架构展示 Altera的SERDES介绍 往期回顾 ...

  4. 4位快速加法器和4位串行加法器相比_使用混合信号示波器调试串行总线系统

    本应用指南面向的读者是数字系统设计师,他们在研发过程中会用到模拟和数字元器件,包括采用串行总线的微控制器和 DSP 系统.本文讨论调试串行总线设计所面临的挑战和新的解决方案,这些串行总线包括控制器局域 ...

  5. SPI、I2C、UART三种串行总线的原理、区别及应用

    SPI协议解析,链接如下 https://blog.csdn.net/weiqifa0/article/details/82765892 I2C协议解析,链接如下 https://blog.csdn. ...

  6. SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

    SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...

  7. 高速串行总线设计基础(七)揭秘SERDES高速面纱之时钟校正与通道绑定技术

    文章目录 前言 时钟校正 接收和发送缓冲区 通道绑定 参考文献 前言 上篇文章讲了高速串行总线中的数据包核参考时钟的相关内容,见:高速串行总线设计基础(六)揭秘SERDES高速面纱之数据包与参考时钟要 ...

  8. 三种串行总线协议的区别(SPI、I2C和UART)

    SPI.I2C跟UART三种串行总线协议的区别: (如果想了解SPI和I2C更多详细内容,可看 SPI总线(一):基本原理篇, SPI总线(二):驱动分析篇,SPI总线(三):驱动实例,i2c总线(基 ...

  9. 高速串行总线系列(3)GTX/GTH 物理层结构分析

    文章目录 前言 Transceiver总览 MGT BANK QUAD GTX CHANNEL TRANSMITTER FPGA TX Interface TX 8B/10B Encoder TX G ...

最新文章

  1. 妹子在生产服务器执行了 rm -rf /*,还好有我帮她恢复了
  2. Java学习笔记(必看经典)
  3. UA MATH523A 实分析1 集合论基础6 一些点集拓扑基本概念
  4. HTTP,FTP,TCP,UDP及SOCKET
  5. js控制复选框选中显示不同表单_Vue之 表单
  6. Hadoop之MapReduce程序应用一读取专利引用数据集并对它进行倒排
  7. Android.os.SystemClock
  8. OpenCV中基本数据结构(1)_Point
  9. 强化学习Q-Learning算法及实现详解
  10. Spring学习(三)
  11. Oracle生成流水号函数
  12. 微信小程序长按识别二维码
  13. 基于蒙特卡洛方法的机器人工作空间MATLAB仿真
  14. 安装Pure-ftpd
  15. 2021年材料员-通用基础(材料员)考试试题及材料员-通用基础(材料员)作业模拟考试
  16. “福娃”:可口可乐的新挑战
  17. 基于FPGA 以太网gmii_to_rgmii模块编写 附源码
  18. 最新s1 ROM下载汇总
  19. 波音CEO下台,股票立涨3.8%!波音:裁员不如裁CEO
  20. 比微社区更好的公众号粉丝交流用的论坛,都在这里了!

热门文章

  1. my97DatePicker日期控件
  2. 2023年铁路春运购票日历来了!快记在备忘录
  3. 安装pycharm流程
  4. 接单平台强烈推荐汇总
  5. 【DTK学习】获取锤子科技SmartisanOS在线手机壁纸
  6. 关于环境专业学生/老师使用笔记本的调研
  7. 上海联通大数据剖析2014世界杯背后
  8. 类抖音评论区弹窗效果,手拖弹窗
  9. 前妻贾斯汀解读马斯克何以能“极度成功”:痴迷!痴迷!痴迷!
  10. 竞品分析怎么做?4要素+6大核心方法论教你迅速掌握竞品分析精髓