SWP协议解析:单线通信与状态切换

需积分: 44 33 下载量 71 浏览量 更新于2024-08-13 1 收藏 1.2MB PPT 举报
"本文主要介绍的是SWP FSM模块与SWP协议的相关知识,特别是关于状态切换和波特率设置的细节。SWP(Single Wire Protocol)是一种用于非接触通信模块CLF与UICC卡之间信息传输的协议,它在一根信号线上实现全双工通信。" 在SWP FSM模块中,`swp_status`寄存器的位4-3用于表示状态,其复位值是00。状态切换的关键是`S1_detect_counter`,它以13.56M或27.12M的频率计数,并在S1信号的上升沿到来时进行判断。当S1为高时,计数器递增,为低时递减。计数器的中值初始值为256,并会根据不同的波特率设置溢出值来改变`swp_state`。 对于13.56MHz频率,当S1的上升沿到来时,如果计数器没有达到设定的`suspend overflow value`或`deactivated overflow value`,则状态变为Active,计数器重置为256。如果计数器溢出到`suspend overflow value`,则状态返回到Suspend。具体的溢出值根据不同波特率有所变化,例如,106K波特率下,溢出值分别为384和128,而212K波特率下,溢出值分别是320和192。 SWP协议的物理层定义了S1和S2信号的编码规则和电气特性。S1是电压信号,S2是电流信号,且S2必须在S1为高时才有效。SWP接口有三个状态:ACTIVATED(数据交互状态)、SUSPENDED(暂停状态)和DEACTIVATED(非激活状态)。在ACTIVATED状态下,S1持续交替发送“0”“1”序列,直到进入SUSPENDED状态,此时S1为“H”,S2为“L”。 状态转换中,RESUME操作可由主设备或从设备发起,将SUSPENDED状态恢复到ACTIVATED状态。主设备发送连续的idlebits,然后从设备在规定时间内响应。而SUSPEND仅由主设备发起,发送(P1Suspend序列),SUSPENDED状态时S1保持“H”,S2保持“L”。DEACTIVATED状态是通过主设备将S1从“H”变为“L”超过(P4)规定时间来实现。 SWP协议支持class B和class C的电气特性,确保在一根信号线上实现全双工通信。通过精细调整波特率和溢出值,SWP能够高效稳定地在CLF和UICC卡之间交换数据,同时兼容ISO7816接口,使得SIM卡可以同时支持7816和SWP接口。

在MFC中,CFormView类可以通过资源ID来关联一个对话框模板,也可以通过代码动态创建一个对话框。当CFormView对象被创建时,它会自动调用Create函数,该函数会根据资源ID或代码动态创建一个对话框,并将其作为CFormView的子窗口。 如果你想更换已经加载好的dialog,可以先在资源编辑器中创建一个新的对话框模板,然后在CFormView的派生类中添加一个成员变量来保存对话框的指针。在需要更换对话框的地方,调用DestroyWindow函数销毁当前的对话框,然后调用Create函数创建新的对话框,并将其作为CFormView的子窗口。 举个例子,如果我们在CFormView的派生类中需要更换一个名为MyDialog2的对话框,可以使用以下代码: 复制 void CMyFormView::OnButtonClicked() { // 销毁当前的对话框 GetDlgItem(IDC_DIALOG)->DestroyWindow(); // 创建一个 MyDialog2 对话框 CMyDialog2* pDlg = new CMyDialog2(); pDlg->Create(IDD_MY_DIALOG2, this); // 将 MyDialog2 对话框作为子窗口添加到 CFormView 中 pDlg->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); } 在这个例子中,我们在OnButtonClicked函数中先调用DestroyWindow函数销毁当前的对话框,然后动态创建一个名为pDlg的CMyDialog2对象,并调用Create函数创建MyDialog2对话框。最后,我们调用SetWindowPos函数将MyDialog2对话框作为子窗口添加到CFormView中,并设置其显示位置和大小。这样,就完成了更换对话框的操作。

148 浏览量