请选择 进入手机版 | 继续访问电脑版

DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1821|回复: 1

[UUProg] uuprog开发教程:芯片操作函数

[复制链接]
发表于 2014-12-13 11:32:36 | 显示全部楼层 |阅读模式
编程器的芯片编程其实就是对芯片的各项操作的集成,读、擦除、写、校验、加密等,编程就是对这些操作的统称。下面几个函数处理的就是相应的功能。
   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. }
复制代码



发表于 2021-1-24 13:51:09 | 显示全部楼层
你这个编程器有ID么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2021-11-29 01:45 , 耗时 0.171757 秒, 26 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器
DIY编程器群1:3044634 DIY编程器1

Email:libyoufer@sina.com

QQ:28000622

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表