DIY编程器网

标题: uuprog开发教程:芯片操作函数 [打印本页]

作者: liyf    时间: 2014-12-13 11:32
标题: uuprog开发教程:芯片操作函数
编程器的芯片编程其实就是对芯片的各项操作的集成,读、擦除、写、校验、加密等,编程就是对这些操作的统称。下面几个函数处理的就是相应的功能。
   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、读取
这里指的就是读取芯片的数据。
  1. void CUUProgDlg::OnDeviceReadData()
  2. {
  3.         DWORD dwElapseTime;
  4.         // TODO: Add your command handler code here
  5.         if(m_bProgLink)
  6.         {
  7.                 SetAppLog("读芯片数据开始...");
  8.                 dwBeginTime = ::GetTickCount();
  9.                 //发送读取命令
  10.                
  11.                 //读取结果
  12.                
  13.                 dwEndTime = ::GetTickCount();
  14.                 //显示结果
  15.                 dwElapseTime = dwEndTime-dwBeginTime;
  16.                 dwAllTime += dwElapseTime;
  17.                 SetAppLog("读取完成。");
  18.                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
  19.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
  20.         }
  21.         else
  22.         {
  23.                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
  24.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
  25.         }
  26.         
  27. }
复制代码


2、读芯片id
这个对于某些芯片来说的,有这个功能该函数才有效。
  1. void CUUProgDlg::OnDeviceReadId()
  2. {
  3.         DWORD dwElapseTime;
  4.         // TODO: Add your command handler code here

  5.         if(m_bProgLink)
  6.         {
  7.                 SetAppLog("读芯片ID开始...");
  8.                 dwBeginTime = ::GetTickCount();
  9.                 //发送读取命令
  10.                
  11.                 //读取结果
  12.                
  13.                 dwEndTime = ::GetTickCount();
  14.                 //显示结果
  15.                 dwElapseTime = dwEndTime-dwBeginTime;
  16.                 dwAllTime += dwElapseTime;
  17.                 SetAppLog("读取完成。");
  18.                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
  19.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
  20.         }
  21.         else
  22.         {
  23.                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
  24.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
  25.         }
  26. }
复制代码


3、查空
检查芯片内是否有数据,当然有些芯片加密了就无法判断了。
  1. void CUUProgDlg::OnDeviceCheckBlank()
  2. {
  3.         DWORD dwElapseTime;
  4.         // TODO: Add your command handler code here
  5.         if(m_bProgLink)
  6.         {
  7.                 SetAppLog("芯片查空开始...");
  8.                 dwBeginTime = ::GetTickCount();
  9.                 //发送查空命令
  10.                
  11.                 //读取结果
  12.                
  13.                 dwEndTime = ::GetTickCount();
  14.                 //显示结果
  15.                 dwElapseTime = dwEndTime-dwBeginTime;
  16.                 dwAllTime += dwElapseTime;
  17.                 SetAppLog("查空完成。");
  18.                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
  19.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
  20.         }
  21.         else
  22.         {
  23.                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
  24.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
  25.         }
  26.         
  27. }
复制代码

4、写入
就是将上位机的缓冲数据写入芯片。
  1. void CUUProgDlg::OnDeviceWriteData()
  2. {
  3.         DWORD dwElapseTime;
  4.         if(m_bProgLink)
  5.         {
  6.                 // TODO: Add your command handler code here
  7.                 SetAppLog("写入芯片开始...");
  8.                 if(m_bCounton)
  9.                 {
  10.                         if (m_iMaxNum == m_iCurNum)
  11.                         {
  12.                                 SetAppLog("编程已到设定数目,退出编程");
  13.                                 AfxMessageBox("编程已到设定数目,退出编程");
  14.                                 return;
  15.                         }
  16.                 }
  17.                 dwBeginTime = ::GetTickCount();
  18.                 //发送写命令
  19.                
  20.                 //读取结果
  21.                
  22.                 dwEndTime = ::GetTickCount();
  23.                 //显示结果
  24.                 dwElapseTime = dwEndTime-dwBeginTime;
  25.                 dwAllTime += dwElapseTime;
  26.                 SetAppLog("写入完成。");
  27.                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
  28.                 if(m_bCounton)
  29.                 {
  30.                         if (m_iMaxNum == m_iCurNum)
  31.                         {
  32.                                 AfxMessageBox("编程已到设定数目,退出编程");
  33.                                 return;
  34.                         }
  35.                         m_iCurNum += 1;
  36.                         m_iSuccessNum += 1;
  37.                         SetCount();
  38.                 }
  39.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
  40.         }
  41.         else
  42.         {
  43.                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
  44.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
  45.         }
  46.         
  47. }
复制代码



5、擦除
将芯片上的现有数据清除,或者复位flash、加密位等。
  1. void CUUProgDlg::OnDeviceErase()
  2. {
  3.         DWORD dwElapseTime;
  4.         // TODO: Add your command handler code here
  5.         if(m_bProgLink)
  6.         {
  7.                 SetAppLog("擦除芯片开始...");
  8.                 dwBeginTime = ::GetTickCount();
  9.                 //发送擦除命令
  10.                
  11.                 //读取结果
  12.                
  13.                 dwEndTime = ::GetTickCount();
  14.                 //显示结果
  15.                 dwElapseTime = dwEndTime-dwBeginTime;
  16.                 dwAllTime += dwElapseTime;
  17.                 SetAppLog("擦除完成。");
  18.                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
  19.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
  20.         }
  21.         else
  22.         {
  23.                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
  24.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
  25.         }
  26.         
复制代码


6、校验
通过比较缓冲的数据与芯片上的数据是否一致来确定是否写入正常。
  1. void CUUProgDlg::OnDeviceVerify()
  2. {
  3.         DWORD dwElapseTime;
  4.         if(m_bProgLink)
  5.         {
  6.                 // TODO: Add your command handler code here
  7.                 SetAppLog("校验芯片数据开始...");
  8.                 dwBeginTime = ::GetTickCount();
  9.                 //发送校验命令
  10.                
  11.                 //读取结果
  12.                
  13.                 dwEndTime = ::GetTickCount();
  14.                 //显示结果
  15.                 dwElapseTime = dwEndTime-dwBeginTime;
  16.                 dwAllTime += dwElapseTime;
  17.                 SetAppLog("校验完成。");
  18.                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
  19.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
  20.         }
  21.         else
  22.         {
  23.                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
  24.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
  25.         }
  26.         
  27. }
复制代码


7、加密
大多数芯片都支持加密,例如24类就没法用该函数了。
  1. void CUUProgDlg::OnDeviceLockBit()
  2. {
  3.         DWORD dwElapseTime;
  4.         // TODO: Add your command handler code here
  5.         if(m_bProgLink)
  6.         {
  7.                 SetAppLog("加密芯片开始...");
  8.                 dwBeginTime = ::GetTickCount();
  9.                 //发送加密命令
  10.                
  11.                 //读取结果
  12.                
  13.                 dwEndTime = ::GetTickCount();
  14.                 //显示结果
  15.                 dwElapseTime = dwEndTime-dwBeginTime;
  16.                 dwAllTime += dwElapseTime;
  17.                 SetAppLog("加密完成。");
  18.                 SetAppLog("耗时:"+Int2Str(dwElapseTime)+" ms");
  19.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("ding.wav",SND_ASYNC);
  20.         }
  21.         else
  22.         {
  23.                 SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
  24.                 if(m_bBeepon && m_bOneKeyMode)    sndPlaySound("chord.wav",SND_ASYNC);
  25.         }
  26.         
  27. }
复制代码


8、一键编程
这个是出于方便考虑的,一次实现擦除芯片数据、将缓冲的数据写入芯片、校验数据正确性、加密等操作,适合量产。
  1. void CUUProgDlg::OnDEVICEAutoProg()
  2. {
  3.         // TODO: Add your command handler code here
  4.         dwAllTime = 0;
  5.         dwEndTime = 0;
  6.         dwBeginTime = 0;
  7.         m_bOneKeyMode = false;

  8.         if(m_bProgLink)
  9.         {
  10.         SetAppLog("一键编程开始...");
  11.         if(m_bReadID)         OnDeviceReadId();
  12.         if(m_bCheckBlank)        OnDeviceCheckBlank();
  13.         if(m_bErase)        OnDeviceErase();
  14.         if(m_bPrograme)        OnDeviceWriteData();
  15.         if(m_bVerify)        OnDeviceVerify();
  16.         if(m_bLockbit)        OnDeviceLockBit();
  17.         SetAppLog("一键编程完成。");
  18.         SetAppLog("总耗时:"+Int2Str(dwAllTime)+" ms");
  19.         if(m_bBeepon)    sndPlaySound("ding.wav",SND_ASYNC);
  20.         }
  21.         else
  22.         {
  23.         SetAppLog("未找到编程器,请检查编程器USB线是否连接!");
  24.         if(m_bBeepon)    sndPlaySound("chord.wav",SND_ASYNC);
  25.         }
  26.         m_bOneKeyMode = true;
  27. }
复制代码




作者: wlecust06    时间: 2021-1-24 13:51
你这个编程器有ID么?




欢迎光临 DIY编程器网 (http://diybcq.com./) Powered by Discuz! X3.2