最近在嵌入式一个小项目中需要加上上位机控制I2C,阅读了大量资料,下面简单介绍下工作内容与知识要点。
并行口与串行口的区别是交换信息的方式不同,并行口能同时通过8条数据线传输信息,一次传输一个字节;而串行口只能用1条线传输一位数据,每次传输一个字节的一位。并行口由于同时传输更多的信息,速度明显高于串行口,但串行口可以用于比并行口更远距离的数据传输。
25针并行口:
25针并行口插口的针脚功能:
针脚 功能 针脚 功能
1 选通 (STROBE低电平) 10 确认 (ACKNLG低电平)
2 数据位0 (DATAO) 11 忙 (BUSY)
3 数据位1 (DATA1) 12 却纸 (PE)
4 数据位2 (DATA2) 13 选择 (SLCT)
5 数据位3 (DATA3) 14 自动换行 (AUTOFEED低电平)
6 数据位4 (DATA4) 15 错误观点(ERROR低电平)
7 数据位5 (DATA5) 16 初始化成(INIT低电平)
8 数据位6 (DATA6) 17 选择输入 (SLCTIN低电平)
9 数据位7 (DATA7) 18-25 地线路(GND)
D0-D7为数据线, S0-S7为状态线, 但是S0,S1,S2是看不见的(从图中你也可以看出), 状态线是用来读取数据的, 但S0却不同, 它是超时标志位, 其他的状态线从第10-11-12-13-15针是用来发送数据的(可以看出是5位). 那么我们怎么能得到这些数据端口呢? 很简单: 每一个并口都有一个地址. 在Windows2000中, 你可以在打印机端口(LPT1)的属性中看到他们. 比如:我的是0378-037F, 如果是10进制, 那么就是888. 同样你也可以看到你的COM端口的地址. 让我以打印机为例解释一下这些针位的意义:
l S0: 在EPP(增强的串口)模式下, 如果超时的话, 这位置1.
l S1: 没用(估计是装饰).
l S2: 大多数情况下没有使用.
l S3: 如果打印机发生了错误则置0. 它通常被叫做nError或者nFault.
l S4: 如果数据达到, 则置1.我们通常叫做Select.
l S5: 如果没有打印纸了则置1.通常叫做PaperEnd或者PaperEmpty或者PError.
l S6: 如果打印机得到了一个字节的数据则此位置0, 通常叫做nAck或者nAcknowledge.
l S7: 如果打印机处于繁忙的状态则此位置0, 通常叫做Busy.
控制线:
这些线通常用来输出,但有时也可以用于输入. 他们占用C0-C7(如图), 但是在接口上C4, C5, C6, C7是不可见, 他们占用的端口地址是0x37A.
l C0: 这一针脚是保留的. 他发送命令去读取端口上的数据(D0-D7). 当计算机启动的时候,这一位被置1,通常叫做nStrobe.
l C1: 保留.通过他发送命令给打印机, 可以得到下一条打印线.(LF)
l C2: 重置打印机并且清空数据缓冲区.(nInitialize)
l C3: 保留.置高电平打开数据输入.启动计算机时置0.(nSelectIn)
地线:
从G0-G7的针是接地用的, 他们一般是用来完善电路的.
综上所述,在我的应用程序里使用数据线而不是具有保留位的控制线或者状态线作为数据传输。原因显而易见:我们可以发送任何数据到数据线上,比如00000000,这样8根针就没有任何电压(0伏特);当然也可以发送11111111(255),这样每根针都有+5伏特的电压。但是如果我们使用控制线,他有C0,C1和C3是保留,当我们发送0000000的时候,他却只能是0100,所以这样数据就不正确了。
信号 |
数据位 |
针脚 |
方向 |
-Strobe |
?C0 |
1 |
Output |
+Data Bit 0 |
D0 |
2 |
Output |
+Data Bit 1 |
D1 |
3 |
Output |
+Data Bit 2 |
D2 |
4 |
Output |
+Data Bit 3 |
D3 |
5 |
Output |
+Data Bit 4 |
D4 |
6 |
Output |
+Data Bit 5 |
D5 |
7 |
Output |
+Data Bit 6 |
D6 |
8 |
Output |
+Data Bit 7 |
D7 |
9 |
Output |
-Acknowledge |
S6 |
10 |
Input |
+Busy |
?S7 |
11 |
Input |
+Paper End |
S5 |
12 |
Input |
+Select In |
S4 |
13 |
Input |
-Auto Feed |
?C1 |
14 |
Output |
-Error |
S3 |
15 |
Input |
-Initialize |
C2 |
16 |
Output |
-Select |
?C3 |
17 |
Output |
Ground |
- |
18-25 |
Ground |
AT24C02是Atmel公司生产的低功耗CMOS型EEPROM,内含2K bit,即256字节存储空间。它采用I2C总线方式进行数据读写,可工作于标准模式、快速模式和高速模式。硬件电路及其简单,数据读写也很方便。
(1)引脚定义
1、2、3引脚为地址输入脚,根据需要分别接地或电源。当I2C总线工作于多节点模式时确定器件地址。AT24C02的地址分为固定部分和可编址部分,高半字节固定为1010,低半字节前三位对应A2、A1、A0引脚,最低位为读/写选择位。“0”表示写操作,“1”表示读操作。在主机发送起始条件后需发送器件地址,以确定要进行操作的器件,被选中的器件发送应答信号。4、8引脚分别接地与电源。6、7号引脚为I2C总线的时钟线与数据线,需加10K上拉电阻以使I2C总线在空闲时保持高电平。7号引脚为写保护引脚,接地时可正常读写,接高时只允许对器件进行读操作,以防止因为误操作而损坏内部存储的数据。AT24C02的写周期约为10ms,也就是在写操作后10ms才能正常读出数据。
(2)AT24C02写操作
单字节写操作
写操作要求在发送器件地址及应答后,发送一字节子地址,即存储器内部地址,因AT24C02容量为256字节,所以子地址为0-255。在接收到子地址后EEPROM再发送一位应答。在接下来的时钟周期里主机发送8位数据,EEPROM应答后,主机发送停止信号。
页写操作
AT24C02提供32个8字节的页空间。页写操作初始化与字节写相同,但在EEPROM接受到8位数据后单片机并不发送停止条件,而是继续发送7字节数据,在每接受一字节数据,EEPROM发送一位应答。在发送完8字节数据后,单片机需发送停止信号以终止操作。在进行页写操作时,存储器的子地址低三位会自动增一,但由于高位并不自增,在子地址加到页空间边界,即写入8字节后,下一字节会自动写入该页空间的第一字节,覆盖之前的数据,即“roll over”。
(3)AT24C02读操作
单字节读操作
读操作分为当前地址读操作、随机读操作、顺序读操作。这里以随机读操作为例。在单片机发送完器件地址及子地址后,产生另一个重复起始信号,并发送器件地址(此时的器件地址最低位为1,表示读操作),这时子地址指向的为之前定义的值,方便访问任意地址空间,单片机接收到数据后发送非应答信号,并产生停止条件。
软件界面
用户1826731 2015-1-20 16:07
用户1576387 2014-8-9 12:35
用户1576387 2014-8-9 12:31
用户1096416 2014-4-22 23:27
用户377235 2014-4-18 20:47
用户1688005 2014-4-15 20:22
用户191857 2012-12-28 19:55
wxg1988 2012-11-15 09:16