硬件工程师社招题:建立时间与保持时间

答案及简单理解
建立时间(Tsu:set up time)是指在时钟沿到来之前数据从不稳定到稳定所需的时间。如果建立的时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器;
保持时间(Th:hold time)是指数据稳定后保持的时间,如果保持时间不满足要求那么数据同样也不能被稳定的打入触发器。建立与保持时间的简单示意图如下图1所示。

好了,简单理解就到这里啦。要记忆深刻可以往下看,保证简单清晰不费脑!

深入浅出理解
永远要记住:所有的数字电路都是以门电路为基础的!
我们先来理解建立时间(Th:hold time):时钟沿到来之前数据从不稳定到稳定所需的时间。
I2C为例子;I2C的本质实际是D触发器,而D触发器是由两个D锁存器构成的
沿触发的触发器也叫主从触发器

当CLK为低电平时,经过反相器,主锁存器导通,当CLK为高电平时候,从锁存器导通。
为了Q能输出正确的值,Qm一定要在CLK变高之前就成功输出(变得稳定)!
即是建立时间:时钟上升沿到来之前数据从不稳定到稳定所需的时间
我们再来理解保持时间(Th:hold time)是指数据稳定后保持的时间。
看一眼就行,一下子就记住了,不用背!
我们把D触发器展开,内部图如下:好多的门电路,而门电路是有延迟的,所以从CLK被打入锁存器到输出是有时间的

所以需要:保持时间(Th:hold time)是指数据稳定后保持的时间

至于时间怎么计算喃,就要细致的计算了,但是这是研究生和FPGA才做的事,我们就不过多展开了,毕竟你也用不上,狗头保命。


 

### I2C协议中的建立时间保持时间 在I2C通信过程中,为了确保信号的可靠传输,必须遵循严格的时序要求。对于数据线(SDA)和时钟线(SCL),存在两种重要的时序参数:建立时间(Setup Time)和保持时间(Hold Time)。这两种时间定义如下: - **建立时间**是指,在时钟边沿到来之前,数据线上的电平状态应该已经稳定的时间长度。这确保了当接收方采样数据时,数据已经被正确设置好。 - **保持时间**则是指,在时钟边沿之后,数据线上的电平状态应当维持不变的一段时间。这样可以防止由于噪声或其他干扰因素引起的误判。 具体到I2C协议中,根据不同的工作模式(标准模式、快速模式等),这些时间的具体数值会有所不同[^3]。例如,在标准模式下的I2C通信里,通常规定了最小的建立时间为250ns,而最小的保持时间为400ns;而在快速模式下,则分别为100ns 和90ns[^1]。 #### 时序图解释 下面给出了一段用于说明如何通过编程来实现一次完整的字节读取操作的伪代码片段,这段代码展示了典型的I2C读取流程及其涉及的关键时序控制点[^4]: ```c retc = 0; SDA = 1; // 设置数据线为输入方式 for (BitCnt = 0; BitCnt < 8; BitCnt++) { _Nop(); SCL = 0; // 将时钟线设为低电平,准备接收下一个比特位 delay_us(5); // 确保足够的低电平时长 (>4.7us) SCL = 1; // 提升时钟线至高电平,使得当前数据位有效 delay_us(4); // 给定一定延迟以便让数据稳定 retc <<= 1; if (SDA == 1) retc += 1; // 获取并存储接收到的数据位 } SCL = 0; // 结束本次读取过程 delay_us(5); return(retc); ``` 此代码示例体现了对上述提到的两个重要时间段——即建立时间保持时间的实际应用。每次改变`SCL`的状态前后都加入了适当延时函数调用(`_Nop()` 或 `delay_us()`) 来满足相应的时序需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值