| 
 | 
 
编程器的芯片编程其实就是对芯片的各项操作的集成,读、擦除、写、校验、加密等,编程就是对这些操作的统称。下面几个函数处理的就是相应的功能。 
   afx_msg void OnDeviceReadId(); 
    afx_msg void OnDeviceCheckBlank(); 
    afx_msg void OnDeviceReadData(); 
    afx_msg void OnDeviceErase(); 
    afx_msg void OnDeviceWriteData(); 
    afx_msg void OnDeviceVerify(); 
    afx_msg void OnDeviceLockBit(); 
    afx_msg void OnDEVICEAutoProg(); 
看函数名该很容易理解其功能了。下面就介绍下每个函数的基本框架。 
1、读取 
这里指的就是读取芯片的数据。 
- void CUUProgDlg::OnDeviceReadData() 
 
 - {
 
 -         DWORD dwElapseTime;
 
 -         // TODO: Add your command handler code here
 
 -         if(m_bProgLink)
 
 -         {
 
 -                 SetAppLog("读芯片数据开始...");
 
 -                 dwBeginTime = ::GetTickCount();
 
 -                 //发送读取命令
 
 -                 
 
 -                 //读取结果
 
 -                 
 
 -                 dwEndTime = ::GetTickCount();
 
 -                 //显示结果
 
 -                 dwElapseTime = dwEndTime-dwBeginTime;
 
 -                 dwAllTime += dwElapseTime;
 
 -                 SetAppLog("读取完成。");
 
 -                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
 
 -         }
 
 -         else
 
 -         {
 
 -                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
 
 -         }
 
 -         
 
 - }
 
  复制代码 
 
2、读芯片id 
这个对于某些芯片来说的,有这个功能该函数才有效。 
- void CUUProgDlg::OnDeviceReadId() 
 
 - {
 
 -         DWORD dwElapseTime;
 
 -         // TODO: Add your command handler code here
 
  
-         if(m_bProgLink)
 
 -         {
 
 -                 SetAppLog("读芯片ID开始...");
 
 -                 dwBeginTime = ::GetTickCount();
 
 -                 //发送读取命令
 
 -                 
 
 -                 //读取结果
 
 -                 
 
 -                 dwEndTime = ::GetTickCount();
 
 -                 //显示结果
 
 -                 dwElapseTime = dwEndTime-dwBeginTime;
 
 -                 dwAllTime += dwElapseTime;
 
 -                 SetAppLog("读取完成。");
 
 -                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
 
 -         }
 
 -         else
 
 -         {
 
 -                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
 
 -         }
 
 - }
 
 
  复制代码 
 
3、查空 
检查芯片内是否有数据,当然有些芯片加密了就无法判断了。 
- void CUUProgDlg::OnDeviceCheckBlank() 
 
 - {
 
 -         DWORD dwElapseTime;
 
 -         // TODO: Add your command handler code here
 
 -         if(m_bProgLink)
 
 -         {
 
 -                 SetAppLog("芯片查空开始...");
 
 -                 dwBeginTime = ::GetTickCount();
 
 -                 //发送查空命令
 
 -                 
 
 -                 //读取结果
 
 -                 
 
 -                 dwEndTime = ::GetTickCount();
 
 -                 //显示结果
 
 -                 dwElapseTime = dwEndTime-dwBeginTime;
 
 -                 dwAllTime += dwElapseTime;
 
 -                 SetAppLog("查空完成。");
 
 -                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
 
 -         }
 
 -         else
 
 -         {
 
 -                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
 
 -         }
 
 -         
 
 - }
 
  复制代码 
4、写入 
就是将上位机的缓冲数据写入芯片。 
- void CUUProgDlg::OnDeviceWriteData() 
 
 - {
 
 -         DWORD dwElapseTime;
 
 -         if(m_bProgLink)
 
 -         {
 
 -                 // TODO: Add your command handler code here
 
 -                 SetAppLog("写入芯片开始...");
 
 -                 if(m_bCounton) 
 
 -                 {
 
 -                         if (m_iMaxNum == m_iCurNum)
 
 -                         {
 
 -                                 SetAppLog("编程已到设定数目,退出编程");
 
 -                                 AfxMessageBox("编程已到设定数目,退出编程");
 
 -                                 return;
 
 -                         }
 
 -                 }
 
 -                 dwBeginTime = ::GetTickCount();
 
 -                 //发送写命令
 
 -                 
 
 -                 //读取结果
 
 -                 
 
 -                 dwEndTime = ::GetTickCount();
 
 -                 //显示结果
 
 -                 dwElapseTime = dwEndTime-dwBeginTime;
 
 -                 dwAllTime += dwElapseTime;
 
 -                 SetAppLog("写入完成。");
 
 -                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
 
 -                 if(m_bCounton) 
 
 -                 {
 
 -                         if (m_iMaxNum == m_iCurNum)
 
 -                         {
 
 -                                 AfxMessageBox("编程已到设定数目,退出编程");
 
 -                                 return;
 
 -                         }
 
 -                         m_iCurNum += 1;
 
 -                         m_iSuccessNum += 1;
 
 -                         SetCount();
 
 -                 }
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
 
 -         }
 
 -         else
 
 -         {
 
 -                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
 
 -         }
 
 -         
 
 - }
 
  复制代码 
 
 
5、擦除 
将芯片上的现有数据清除,或者复位flash、加密位等。 
- void CUUProgDlg::OnDeviceErase() 
 
 - {
 
 -         DWORD dwElapseTime;
 
 -         // TODO: Add your command handler code here
 
 -         if(m_bProgLink)
 
 -         {
 
 -                 SetAppLog("擦除芯片开始...");
 
 -                 dwBeginTime = ::GetTickCount();
 
 -                 //发送擦除命令
 
 -                 
 
 -                 //读取结果
 
 -                 
 
 -                 dwEndTime = ::GetTickCount();
 
 -                 //显示结果
 
 -                 dwElapseTime = dwEndTime-dwBeginTime;
 
 -                 dwAllTime += dwElapseTime;
 
 -                 SetAppLog("擦除完成。");
 
 -                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
 
 -         }
 
 -         else
 
 -         {
 
 -                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
 
 -         }
 
 -         
 
  复制代码 
 
6、校验 
通过比较缓冲的数据与芯片上的数据是否一致来确定是否写入正常。 
- void CUUProgDlg::OnDeviceVerify() 
 
 - {
 
 -         DWORD dwElapseTime;
 
 -         if(m_bProgLink)
 
 -         {
 
 -                 // TODO: Add your command handler code here
 
 -                 SetAppLog("校验芯片数据开始...");
 
 -                 dwBeginTime = ::GetTickCount();
 
 -                 //发送校验命令
 
 -                 
 
 -                 //读取结果
 
 -                 
 
 -                 dwEndTime = ::GetTickCount();
 
 -                 //显示结果
 
 -                 dwElapseTime = dwEndTime-dwBeginTime;
 
 -                 dwAllTime += dwElapseTime;
 
 -                 SetAppLog("校验完成。");
 
 -                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
 
 -         }
 
 -         else
 
 -         {
 
 -                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
 
 -         }
 
 -         
 
 - }
 
  复制代码 
 
7、加密 
大多数芯片都支持加密,例如24类就没法用该函数了。 
- void CUUProgDlg::OnDeviceLockBit() 
 
 - {
 
 -         DWORD dwElapseTime;
 
 -         // TODO: Add your command handler code here
 
 -         if(m_bProgLink)
 
 -         {
 
 -                 SetAppLog("加密芯片开始...");
 
 -                 dwBeginTime = ::GetTickCount();
 
 -                 //发送加密命令
 
 -                 
 
 -                 //读取结果
 
 -                 
 
 -                 dwEndTime = ::GetTickCount();
 
 -                 //显示结果
 
 -                 dwElapseTime = dwEndTime-dwBeginTime;
 
 -                 dwAllTime += dwElapseTime;
 
 -                 SetAppLog("加密完成。");
 
 -                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
 
 -         }
 
 -         else
 
 -         {
 
 -                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
 
 -                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
 
 -         }
 
 -         
 
 - }
 
  复制代码 
 
8、一键编程 
这个是出于方便考虑的,一次实现擦除芯片数据、将缓冲的数据写入芯片、校验数据正确性、加密等操作,适合量产。 
- void CUUProgDlg::OnDEVICEAutoProg() 
 
 - {
 
 -         // TODO: Add your command handler code here
 
 -         dwAllTime = 0;
 
 -         dwEndTime = 0;
 
 -         dwBeginTime = 0;
 
 -         m_bOneKeyMode = false;
 
  
-         if(m_bProgLink)
 
 -         {
 
 -         SetAppLog("一键编程开始...");
 
 -         if(m_bReadID)         OnDeviceReadId();
 
 -         if(m_bCheckBlank)        OnDeviceCheckBlank();
 
 -         if(m_bErase)        OnDeviceErase();
 
 -         if(m_bPrograme)        OnDeviceWriteData();
 
 -         if(m_bVerify)        OnDeviceVerify();
 
 -         if(m_bLockbit)        OnDeviceLockBit();
 
 -         SetAppLog("一键编程完成。");
 
 -         SetAppLog("总耗时:"+Int2Str(dwAllTime)+" ms");
 
 -         if(m_bBeepon)    sndPlaySound("ding.wav",SND_ASYNC);
 
 -         }
 
 -         else
 
 -         {
 
 -         SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
 
 -         if(m_bBeepon)    sndPlaySound("chord.wav",SND_ASYNC);
 
 -         }
 
 -         m_bOneKeyMode = true;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |