您的位置:首页 > 其它

杂记:Atmel sama5d3 Two-wire Interface (TWI)

2016-07-20 23:16 357 查看
Two-wire Interface (TWI)

概论

两线接口一根时钟线,一根数据线,最高波特率 400k兼容i2c

可为主机或者从机,多主机也支持

I2C Standard Atmel TWI

Standard Mode Speed (100 kHz)      Supported

Fast Mode Speed (400 kHz)             Supported

7- or 10-bit Slave Addressing           Supported

START byte(1)                                 Not Supported

Repeated Start (Sr) Condition          Supported

ACK and NACK Management           Supported

Slope Control and Input Filtering (Fast mode)        Not Supported

Clock Stretching/Synchronization                           Supported

Multi Master Capability                                           Supported

特点:

兼容i2c设备和atmel两线内存

一个两个或者三个字节的从机地址

连续读写操作

主机从机多主机模式支持

最高400k波特率

从模式下支持总招

主模式支持smbus

支持dma

寄存器写保护

Abbreviation Description

TWI   Two-wire Interface

A       Acknowledge

NA     Non Acknowledge

P       Stop

S       Start

Sr      Repeated Start

SADR   Slave Address

ADR      Any address except SADR

R          Read

W         Write

数据和时钟线都是双向线,同上拉电阻或者电流源连正极,空闲时是高电平。

从机需要配置io口为open-drain or open-collector

TWD and TWCK是复用的 需要配置为i2c线 且不能配置成open-drain

twi受Power Management Controller (PMC)控制,需要使能

twi有中断与Interrupt Controller相连,需要配置

Instance ID

TWI0 18

TWI1 19

TWI2 20

发送的数据必须是8bits长度,msb先发,每个字节都要有ack

每次传输的字节数目没有限制。

每次传输都由START开始STOP结束

twi的传输模式如下

主发送模式

主接收模式

多主发送

多主接收

从发送

从接收

TWI_MMR.DADR (+ IADRSZ + IADR if a 10-bit device is addressed):从机地址

TWI_CWGR.CKDIV + CHDIV + CLDIV:时钟波形模式

TWI_CR.SVDIS 非能从模式

TWI_CR.MSEN 使能主模式

如果已经是主模式,device address (DADR)可以直接设置不用非能主模式

主发模式

往这个Transmit Holding register (TWI_THR)写数据时, twi会发送一个START,

并且把DADR in TWI_MMR的7bit的地址发送出去,第8字节是用来确定传输方向的MREAD = 0 in TWI_MMR

twi需要从机在第9bit发送ack每个字节传输的最后,此时的主机会释放数据线

如果没有ack则Not Acknowledge flag (NACK) is set in the TWI Status Register (TWI_SR)

并且会发送STOP。NACK必须要读取TWI_SR才会清除,清除才能再次发送(TWI_THR)

当然如果使能中断Interrupt Enable register (TWI_IER),则会触发中断

如果有ack,则TWI_THR中字节会放入移位寄存器中,然后发送。

当一个ack被检测到,TXRDY会置位,除非TWI_THR有新的字节写入

主写之后,如果没有新字节,scl会一直被拉低,一直到新字节写入TWI_THR,或者一个STOP

置位 STOP bit in TWI_CR 会产生一个STOP

清除TXRDY,需要先置位TWI_CR.MSDIS然后置位TWI_CR.MSEN.

主收模式

先置位START bit发送一个START,然后是7bit的地址然后是 MREAD = 1 in TWI_MMR

第9位释放数据线,如果没有ack 置位 NACK bit in the TWI_SR

如果RXRDY bit is set in the TWI_SR,则Receive Holding Register (TWI_RHR)有数据

读走TWI_RHR,则RXRDY 自动清零。

如果是单字节读,不管internal address (IADR),START and STOP bits必须同时置位

多字节读,不管internal address (IADR),STOP bits要再倒数第二字节时置位

如果Receive Holding Register (TWI_RHR) is full (RXRDY high),则scl会一直被拉低

在接受最后一位的时候直到TWI_RHR被读走

警告:

置位STOP bit在读倒数第二个TWI_RHR之前在中断里面

twi支持7bit 和 10bit地址

内部地址

获取连续储存的 多个字节,先写入内部地址,然后读取数据

第二个start被称作“repeated start” (Sr)

内部地址在(TWI_MMR)中设置

如果不支持内部地址 则IADRSZ必须清零

比7bit多时,设置address size (IADRSZ)设置Internal Address register (TWI_IADR).

使用 dma发送 size-1

初始化dma

配置模式

使能dma

等待dma传输完成标志

非能dma

等待TXRDY flag in TWI_SR

置位 STOP bit in TWI_CR.

写最后一个字节到TWI_THR

等待TXCOMP flag to be raised in TWI_SR

dma接收 size-2

初始化dma

配置模式

使能dma

主模式下写START bit in the TWI_CR

等待dma传输完成标志

非能dma

等待RXRDY flag in TWI_SR

发送STOP bit in TWI_CR

读TWI_RHR

等待RXRDY flag in TWI_SR

读TWI_RHR

等待TXCOMP flag to be raised in TWI_SR
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: