1 使用目的
1.1 I2C触发
触发提供逻辑分析仪的I2C触发之快速应用方案,本功能仅于TravelLogic系列产品提供。
2 硬件操作
2.1 硬件连接
连接逻辑分析仪的通道0、通道1至支援I2C的Microchip demo board的SW2.8(SCK)、SW2.7(SDA) 脚位及接地脚,如图1。


3 应用程序操作
3.1 启动I2C触发
开启逻辑分析仪软件,在工具列上点击S/R:100MHz或是选取「硬件/硬件参数设定」,并按照图2编号顺序,执行下列动作:
Step 1. 选取「I2C Trigger」,根据需求,选择适当的通道数。
Step 2. 设定「采样率」,原则上采样率为待测物频率的4~6倍左右最合适;但是采样率越高可以看到越细致的讯号波形。
Step 3. 调整适当的「记忆深度」。





3.4.2 通道设定
在「I2C触发参数设定」对话方块中,通道设定输入SCL「0」及SDA「1」。如图8。



3.4.3 触发模式设定
在「触发模式设定」选择要触发的模式,我们提供九种模式供使用者选择。如图9。


模式1. 选择Start为触发条件 按下Capture后,触发成功,游标T会停在Start的前缘。如图10。



模式2. 选择Re-Start为触发条件,功能同模式1。
模式3. 选择Start or Re-Start为触发条件,功能同模式1,表示任两个都可以触发。
模式4. 选择Stop为触发条件,功能同模式1。
模式5. 选择Missing Ack为触发条件,表示Not Acknowledge (NACK),功能同模式1。
以上五种模式,若触发成功后,游标T一样停在前缘。如图10。
模式6. 选择Match Sequently为触发条件 由多个单阶式触发组合而成的触发条件,最多有16个阶层。如图11。


每个阶层的右边有选项可以选择,包括Next、ThenIf以及Then Trigger,是用来选择每层之间的关系。每个阶层之间的关系可为连续触发 (Next) 或是非连连续触发 (ThenIf)。如图11为例,第一阶和第二阶为连续触发,第二阶和第三阶之间为非连续触发,以此类推。所以只要每一阶的关系连在一起就代表这两阶之间是连续触发;相反的,如果两阶之间的关系没有相连就代表这两阶之间是非连续触发。图11的第十三、十四、十五和十六阶没有显示,代表这个设定为十二阶的多阶触发 (因为P12设为Then Trigger)。
每个阶层必须单独设定。点击P1,I2C Value Setting的对话方块如图12显示。


设定方式如下:
i. Address
Address的部份有分析Write、Read以及Don’t care。
所谓Don’t care表示Write和Read任两个皆可。
a. Address有勾选时,则分析Address。如图13是分析Write的Address为12h。

b. Address没有勾选时,则分析Data。如图14是分析Data为12h。

ii. Check Acknowledge
Check Acknowledge的部份有分析ACK (Acknowledge)、NACK(Not Acknowledge)。
若没有勾选时,表示Don’t care,任两个皆可。
iii. Data/Address
输入Data或是Address的资料,输入方式包含二位进码、十六位进码,例如:0000010b 或是12h。此外,还有Don’t care的功能,例如:找出10h、20h、30h的资料,可以设定成X0h或是00XX0000b (X or x:Don’t care)。
还可以设定成
「=」:等于、「>」:大于、「>=」:大于等于。
「!=」:不等于、「<」:小于、「<=」:小于等于。
在设定的同时,下方有示意图供使用者参考。如图15。


图15的例子触发成功后,游标T会停在NACK的前缘。如图16。



模式7. 选择All match为触发条件
每个单阶设定的条件全部都要成立,相当于作AND运算。 例如:P1设Data > 30h、P2设Data < 40h。设定结果请看图17的下方示意图。


触发后的结果,游标T停在Data 36h的后缘,同时满足P1及P2的条件。如图18。


模式8. 选择Any Match为触发条件
设定方式跟模式7的All Match一样,但它是作OR运算,也就是每个单阶设定的条件,任一符合就成立。
模式9. 选择Timing Violation为触发条件
提供八种设定时间的条件,如图19。若触发的时间小于设定的值就触发,能有效地帮助使用者作验证,找出错误的地方。


各别介绍,如图20:


i. tSU;STA (红1)
由 Re-Start 开始的时间 (此时 SCL 为 High) 往前找,直到 SCL 转态(此时 S CL 为 Low) 的这段时间就是 Re-Start 的 Setup Time。
转态:Low to High 或 High to Low。
ii. tHD;STA (蓝2)
由 Re-Start 开始的时间 (此时 SCL 为 High) 往后找,直到 SCL 转态(此时 SCL 为 Low) 的这段时间就是 Re-Start 的 Hold Time。
iii. tSU;DAT (蓝3)
由 SCL 上升缘的时间 (此时 Latch 到的 Data 为 X) 往前找,直到 SDA 转态 (Data 为 X 的反相) 的这段时间就是 Data 的 Setup Time。
X:0 或 1。
iv. tHD;DAT (红4)
由 SCL 下降缘的时间 (此时 Latch 到的 Data 为 X) 往后找,直到 SDA 转态 (Data 为 X 的反相) 的这段时间就是 Data 的 Hold Time。
v. tSU;STO (红5)
由 Stop 开始的时间 (此时 SCL 为 High) 往前找,直到 SCL 转态 (此时SCL 为 Low) 的这段时间就是 Stop 的 Setup Time。
vi. tBUF (蓝6)
Start 和 Stop 之间的时间就是 Bus Free Time。
vii. tLOW (红7)
SCL 在 Low 的期间。
viii. tHIGH (蓝8)
SCL 在 High 的期间。
图21是以tSU;STA为14605 ns当触发条件的例子,游标TA之间的时间为-14.6 us (14600 ns < 14605ns),确实触发成功。


3.4.4 Pass Count
代表要搜寻的忽略次数,一般状况Pass Count是设定在0次,这是代表所有符合搜寻条件全部找出来。如果设定为N次时,就代表N+1次时才会开始搜寻。
图22表示P1和P2为连续触发,P2和P3为非连续触发,若执行Pass Count,程序会在最后一个非连续的地方跑循环,以图21来说,会在P3跑循环,总共要忽略三次,到第四次才会触发成功。


3.4.5 Pass Count Type
表示循环会从头开始跑。图23表示不管中间是否有连续或不连续,一切从头开 始跑循环。


3.4.6 Data match with P1 address
仅限跟Match Sequently搭配使用,表示要触发的资料跟随着P1的address。而且第一阶触发(P1)参数必须设定成Address,功能才会开启。
使用时机:当每组Read或Write后面有共同的资料时,但只想要找出某个Read的共享资料,以下例来说,假设某个待测物送以下信号:
Write 22h, Data 52h, 33h, 39h, 21h, 35h
Read 12h, Data 33h, 35h, 24h, 15h, 26h
Read 24h, Data 37h, 35h, 85h, 46h, 31h
这三组封包的共同资料为Data 35h,如果只想找出Read 12h的Data 35h,这时要按照图24这样设定,P1设Read为12h,后面接Ack、P2设Data为35h、P1和P2为非连续触发 (ThenIf),并勾选「Data match with P1 address」。


按下Capture后,上述例子触发成功,游标T会停在35h的后缘。如图25。



4 FAQ
接下来的问题与回答均针对在「I2C触发参数设定」的对话方块中如何设定。
Q1:若想找出Data 25h的NACK,I2C Trigger该如何设定?
A1:按照图26的编号顺序,执行下列动作。
1.触发模式设定选取「Match Sequently」,如图26。
2. P1选取「Then Trigger」,点击P1进入设定。
3.勾选「Check Acknowledge」,并设定为「NACK」,紧接着在「Data/Address」
输入25h,点选「=」。


Q2:I2C送以下资料
Read 26h, Data 36h, 28h, 35h, 45h
若想找出 Read的address为26h,I2C Trigger的Data/Address该如何设定?
A2:按照图27编号顺序,执行下列动作。
1. 触发模式设定选取「Match Sequently」,如图27
2. P1选取「Then Trigger」,点击P1进入设定。
3. 勾选「Address」,并设定为「Read」,接着在「Data/Address」输入00100110b或者是26h也可以,点选「=」。


Q3:I2C送以下资料
Write 26h, Data 22h, 21h, 23h, 20h, 29h
若想找出Data 20h, 21h, 22h, 23h的资料,Data/Address的Don’t care该如何设定?
A3:按照图28的编号顺序,执行下列动作。
1. 在「I2C触发参数设定」对话方块中,触发模式设定选取「Match Sequently」,如图28。
2. P1选取「Then Trigger」,点击P1进入设定。
00100001 (21h)
00100010 (22h)
00100011 (23h)
00101001 (29h)
00100000 (20h)
由这四个数字的8bit可以看出,20h、21h、22h、23h仅改变后面2个bit,所以我们可以把这2个bit给Don’t care,方便跟29h分出区别。
3. 在「Data/Address」输入001000XXb,点选「=」。


Q4:I2C送以下资料
Write 12h, Data 20h, 56h, 25h, 34h, 22h
若想找出非Data 20h, 56h, 25h的其他资料,All Match该如何设定?
A4:触发模式设定选取「All Match」,如图29。

P1选取「Used」,点击P1进入设定,因为要找Data,所以「Address」不要勾选,接着在「Data/Address」输入20h,点选「!=」,如图30。
P2、P3一样作法。


触发后结果,游标T停在34h的后缘,同时满足P1、P2及P3的条件。如图31。


Q5:选择Start为触发条件,Pass Count设为1时,接着先让LA撷取波形,然后再送I2C讯
息,当LA撷取完成后,为何触发的结果,游标T并不是停在第二个Start?如图32。

A5:由于Capture的开头并没有Stop,所以解析出来的第一个封包无法判定是Start或是
Re-Start,硬件会忽略掉这一个封包。
Q6:系统内有两个I2C device与Host连接,某些特殊情况下,两个device都同时使用I2C,
导致Address错误,请问如何设定Trigger,以便于抓到此类错误?
A6:假设其中一个device的address为10h,另一个为20h。
按照图34的编号顺序,执行下列动作。
1. 触发模式设定选取「All Match」,如图34。
2. P1/P2选取「Used」,点击P1/P2进入设定。
3. 勾选「Address」,并设定为「Don’t care」。
4. 在「Data/Address」输入10h/20h,点选「!=」。

触发后结果,游标T停在R:17,同时满足P1、P2的条件(!=10h & !=20h)。如图35。


Q7:假设Start的正常宽度为40us,想抓Start宽度不够时触发,请问如何设定?
A7:按照图36的编号顺序,执行下列动作。
1. 触发模式设定选取「Timing Violation」,如图36。
2. 勾选「tBUF」,并设定为「40000」。


触发后结果,如图37。

5 I2C 噪声之处理
在I2C量测过程中,当爬升(Rising)或下降(Falling)的讯号在触发准位附近时,讯号可能有噪声抖动或是波形缓慢转态造成逻辑分析仪在这个触发准位的临界点撷取到看似噪声(Glitch/Noise)的讯号,如图38。


此情况会造成I2C分析的错误,以下提出3个解决方案供使用者参考:
1. 降低逻辑分析仪采样频率。
此方法主要是降低采样频率使得一些高频噪声无法被逻辑分析仪所撷取到来过滤掉高频噪声。
优点: 操作简单。
缺点: 1.可能忽略掉其他原因所造成的噪声。
2.过低的采样率可能造成无法撷取到正确的I2C讯号。
2. 在高采样频率时,使用突波过滤功能,如图39。
此方法是让逻辑分析仪前端输入讯号通过一个低通滤波器,藉由所设定的脉波宽度来过滤掉高频噪声。
优点: 操作简单。
缺点: 可能忽略掉其他原因所造成的噪声。


图38中的I2C Clock(CH 0)所撷取到的突波约为5ns,所以在突波过滤设定中设定滤除小于10ns的突波,如图40。


然后再重新撷取一次该讯号,小于10ns的突波就会被滤除掉。
3. 使用舒密特(Schmitt)触发电路功能,如图41、图42。
此方法利用两组触发准位来过滤掉讯号在单一触发准位时,因讯号转态过缓或是讯号抖动造成在这个触发准位的临界点撷取到的噪声。此为采用电子学正规处理法,为最佳处置法。



图42
由于逻辑分析仪每个通道只会有1个触发准位设定。因此,使用舒密特电路功能时,必须同时使用两个通道来进行量测。因TravelLogic硬件上只有两组触发准位电路,分别是第一组:通道0-17,第二组:通道18-35。在启用舒密特电路功能时,必须分别设定触发准位(Threshold–High及Threshold–Low)。
设定I2C Clock(CH0) 和 I2C Data(CH1)的触发准位为 Threshold–High: 2.75V, Threshold–Low: 1V,如图42。
然后再重新撷取一次该讯号即可,I2C即可正常分析。