s3c2440裸机-I2c编程-2-i2c控制器

发布时间:2024-07-05  

1.I2c主控与从设备关系


对于写操作,主控作为transmitter,从设备作为receiver

对于读操作,主控作为receiver, 从设备作为transmitter

2.I2c控制器

2.1总框图


Pclk = 50Mhz, 经过prescaler分频,可以得到SCL。

IICSTAT:发出S(start)信号或者P(stop)信号。

Data Bus可以把数据写入IICDS寄存器,然后会自动产生SCL,并且会将8位数据从SDA同步给slave dev,

在数据发送出去后,在第9个SCL时钟,会受到slave dev的ack应答,可以通过查询IICSTAT来判断是否有ACK回应。

当slave dev回应ACK后,那么又可以继续发送数据,继续写入据到IICDS。

当主控想结束,设置IICSTAT发出P信号。

2.2 寄存器介绍

1.IICCON(用来配置i2c时钟)


Bit[7]: 对于发送模式,不需要配置ack信号,ack是接收者发送回来的应答。对于接受模式,设置成1,让它在第9个CLK发出ack讯号(拉低sda)。

Bit[6]:SCL时钟源,pclk分频即可

Bit[5]:中断使能,使用i2c时要去enable

Bit[4]:中断状态标识 表示中断有没有结束,当该bit读出来是1时,SCL被拉低表示busy,也就是i2c中断还在处理中。当i2c中断处理结束后,可以将该bit 清0,释放出SCL。

Bit[3:0]:i2c时钟分频系数配置,SCL时钟 = IICCLK/(IICCON[3:0]+1)

2.IICSTAT(配置模式,S,P信号,查询是否有ack)


bit[7:6]:模式选择

Bit[5]:当读的时候,0表示not busy,1表示busy

当写的时候,0表示写入STOP, 1表示写入START

Bit[4] : 数据输出使能,0:表示disable, 1表示enable

Bit[3]:仲裁flag

Bit[0]:表示i2c总线上的第9个时钟周期有没有ack,1表示有ack, 0表示无ack

3.IICADD(配置从机地址)


4.IICDS: (保存的是要发送或已经接收的数据)


3. 读写操作流程

The following steps must be executed before any IIC Tx/Rx operations.

1. Write own slave address on IICADD register, if needed.

2. Set IICCON register.

a) Enable interrupt

b) Define SCL period

3. Set IICSTAT to enable Serial Output

在操作tx,rx前,要先执行以下几步骤:

1.IICADD写入从设备地址

2.设置IICCON,设置时钟,使能中断

3.设置IICSTAT,使能传输

操作模式:

The S3C2440A IIC-bus interface has four operation modes:

— Master transmitter mode

— Master receive mode

— Slave transmitter mode

— Slave receive mode

①Master/Transmitter Mode



  1. 配置成master tx mode(也就是IICSTAT[7:6]配置成11)

  2. 把从设备地址写入IICDS,(第一次传输地址)

  3. IICSTAT写入0xF0(使能传输,发S信号,使能tx/rx)

  4. IICDS中配置的数据(从设备地址7bit + 读写位1bit)就被发送出去了(每传输完一个数据将产生一个中断)

  5. 判断第9个clk从设备是否有ack

    1. 如果从设备有ack,恢复i2c传输

      1. IICDS = buf

      2. Clear pending bit

      3. 数据被发送出去,继续i2c传输

    2. 如果没有ack, stop,返回错误

      1. IICSTAT = 0xd0

      2. Clear pending bit(IICCON[4])

      3. Delay一会儿等待停止条件生效

②Master/Receiver Mode


  1. 配置成master rx mode(也就是IICSTAT[7:6]配置成10)

  2. 把从设备地址写入IICDS,(第一次传输地址)

  3. IICSTAT写入0xB0(使能传输)

  4. IICDS中配置的数据(从设备地址7bit + 读写位1bit)就被发送出去了(每传输完一个数据将产生一个中断)

  5. 判断第9个clk从设备是否有ack

    1. 如果从设备有ack,恢复i2c传输

      1. Buf = IICDS

      2. Clear pending bit

      3. 数据被接受到,继续i2c传输

    2. 如果没有ack, stop,返回错误

      1. IICSTAT = 0x90

      2. Clear pending bit

      3. Delay一会儿

③Slave/Transmitter Mode



④Slave/Receiver Mode


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>