I2C以前没有怎么接触过,所以做它的模拟功能,只能靠着感觉走,有不妥之处,还望方家指正。做出了spi相关的模拟功能,做I2C相对也就不难了,只不过用户操作I2C总线读写数据的时候要稍微麻烦一点。

测试程序运行界面:

模拟器中的I2C总线的相关代码如下:

  1. public class I2CComponent : I2cDevice
  2. {
  3. public byte[] bytData = new byte[8];
  4. protected override void DeviceRead(byte[] data)
  5. {
  6. try
  7. {
  8. for (int i = 0; i < data.Length; i++)
  9. {
  10. if (i < bytData.Length) data[i] = bytData[i];
  11. }
  12. }
  13. catch { }
  14. base.DeviceRead(data);
  15. }
  16. protected override void DeviceWrite(byte[] data)
  17. {
  18. try
  19. {
  20. for (int i = 0; i < data.Length; i++)
  21. {
  22. if (i < bytData.Length) bytData[i] = data[i];
  23. }
  24. }
  25. catch { }
  26. base.DeviceWrite(data);
  27. }
  28. protected override void DeviceBeginTransaction()
  29. {
  30. base.DeviceBeginTransaction();
  31. }
  32. protected override void DeviceEndTransaction()
  33. {
  34. base.DeviceEndTransaction();
  35. }
  36. }

测试代码如下(还是在原来程序的基础上进行扩充):

  1. static SPI _spi;
  2. public static void Main()
  3. {
  4. OutputPort[] output = new OutputPort[8];
  5. InputPort[] input = new InputPort[8];
  6. //叶帆模拟器GPIO的pin定义
  7. Cpu.Pin[] pin_I = new Cpu.Pin[8] { (Cpu.Pin)10, (Cpu.Pin)11, (Cpu.Pin)12, (Cpu.Pin)13, (Cpu.Pin)14,(Cpu.Pin)15, (Cpu.Pin)16, (Cpu.Pin)17 };
  8. Cpu.Pin[] pin_Q = new Cpu.Pin[8] { (Cpu.Pin)20, (Cpu.Pin)21, (Cpu.Pin)22, (Cpu.Pin)23, (Cpu.Pin)24, (Cpu.Pin)25, (Cpu.Pin)26, (Cpu.Pin)27 };
  9. //SPI的pin定义
  10. _spi=new SPI(new SPI.Configuration((Cpu.Pin)30, true, 0, 0, false, false, 4000, SPI.SPI_module.SPI1));
  11. //I2C定义                           模拟器I2C地址为100 时钟速度不要设置太小否则会有问题
  12. I2CDevice I2CBus = new I2CDevice(new I2CDevice.Configuration(100, 200));
  13. for (int i = 0; i < 8; i++)
  14. {
  15. input[i] = new InputPort(pin_I[i], false, Port.ResistorMode.PullDown);
  16. output[i] = new OutputPort(pin_Q[i], false);
  17. }
  18. int intNum = 0;
  19. while (true)
  20. {
  21. output[intNum].Write(!output[intNum].Read());
  22. Debug.Print("I   : "+input[0].Read().ToString() + " " + input[1].Read().ToString() + " " + input[2].Read().ToString() + " " + input[3].Read().ToString() + " " + input[4].Read().ToString()+ " " + input[5].Read().ToString() + " " + input[6].Read().ToString() + " " + input[7].Read().ToString());
  23. Debug.Print("AD : "+ReadWriteAD((Int16)intNum).ToString() + " " + intNum.ToString());
  24. //---------------------------------------
  25. //I2C读写
  26. byte[] bytRData = new byte[8];
  27. byte[] bytWData = new byte[3];
  28. bytWData[0] = (byte)intNum;
  29. bytWData[1] = (byte)(intNum * 2);
  30. bytWData[2] = (byte)(intNum * 3);
  31. I2CDevice.I2CTransaction[] i2c = new I2CDevice.I2CTransaction[2];
  32. i2c[0]=I2CBus.CreateReadTransaction(bytRData);
  33. i2c[1] = I2CBus.CreateWriteTransaction(bytWData);
  34. I2CBus.Execute(i2c, 100);   //执行
  35. Debug.Print("I2C : " + bytRData[0].ToString() + " " + bytRData[1].ToString() + " " + bytRData[2].ToString() + " " + bytRData[3].ToString() + " " + bytRData[4].ToString() + " " + bytRData[5].ToString() + " " + bytRData[6].ToString() + " " + bytRData[7].ToString());
  36. //---------------------------------------
  37. if (++intNum > 7) intNum = 0;
  38. Thread.Sleep(800);
  39. }
  40. }
  41. public static Int16 ReadWriteAD(Int16 value)
  42. {
  43. byte[] bout = new byte[2];
  44. byte[] bin = new byte[2];
  45. bout[0] = (byte)(value >> 8);
  46. bout[1] = (byte)(value & 0xff);
  47. _spi.WriteRead(bout, bin);
  48. Int16 aw0=(Int16)((bin[0] << 8) + bin[1]);
  49. return aw0;
  50. }
  51. }

好了,模拟器的工作暂时告一个段落,有时间把该模拟器完善一下,给感兴趣的网友共享,这样就不用购买硬件就可以测试一些有意思的代码和功能了(一个测试板卡要好几百美元呢!)。

.Net Micro Framework研究—带I2C总线的模拟器相关推荐

  1. .Net Micro Framework研究—实现SideShow窗体界面

    基于MF系统的Windows SideShow界面是非常炫的(如下图).既然微软能用.Net Micro Framework实现这么棒的界面效果,我想我们也能做到. (SideShow模拟器界面和游戏 ...

  2. .Net Micro Framework研究—串口操作

    .Net Micro Framework研究-串口操作 试验平台:Digi MF开发板 Digi提供的示例中包含了串口的示例程序,主要代码如下: public bool EchoByte() { Se ...

  3. .Net Micro Framework研究—绘图

    试验平台:.Net Micro Framework 模拟器 目前在VS2005的环境里,还不支持.Net Micro Framework界面的所见即所得绘制,界面制作有三种方式,一是窗体直接绘图,二是 ...

  4. .Net Micro Framework研究—串口部署释疑

    前几天我用串口方式部署MF程序总是无法成功,但是用其自带的串口调试程序通信成功.用串口监控程序一查看发现串口参数之校验有问题,应该是无校验,但是微软的调试程序打开的却是偶校验(请参见:http://b ...

  5. .Net Micro Framework研究—TCP/IP通信

    试验平台:Digi MF开发板 关于网络通信方面,Digi提供了两个程序,一个是TCP Server运行在Digi的开发板上,一个是TCP Client程序,运行在PC上,通过网络,上位机很容易控制D ...

  6. .Net Micro Framework研究—让MF支持鼠标

    MF的标准模块仅支持按键,并不支持鼠标功能.但是对一些常见应用来说,如果没有鼠标(或触摸屏)用起来就太不习惯了.有什么办法可以让MF支持鼠标功能呢?第一,外部设备必须把鼠标信息传到MF应用程序,应用程 ...

  7. .Net Micro Framework 快速入门

    一.简介 Microsoft .NET Micro Framework 2001年由微软研究院开始研发,并随后在其MSN Direct项目中使用该技术,2007年9月微软对外发布2.0,2008年10 ...

  8. .Net Micro Framework 嵌入式开发

    原文: http://www.cnblogs.com/yefanqiu/archive/2010/03/02/1676844.html ; .Net Micro Framework 快速入门 一.简介 ...

  9. Micro Framework 3 0模拟器改造

    Micro Framework 3.0的SDK去年十月份就已经发布了,本打算在该SDK发布之后就把我以前开发的,可支持GPIO.I2C.SPI测试的模拟器同步升级为3.0版,以便早点支持VS2008( ...

最新文章

  1. React——Flow代码静态检查
  2. 你算个什么鸟?AI十级“找茬”选手诞生
  3. 【推荐系统】推荐系统中的排序学习
  4. uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案
  5. 在Activiti中如何使用自定义的组织架构
  6. MySQL + Atlas --- 部署读写分离
  7. es统计有多少个分组_ElasticSearch 分组查询的几个例子
  8. python 查询ip工具
  9. 浅谈stm32的低功耗模式
  10. VM设置Ubuntu窗口自适应大小
  11. Cesium矢量地图插件CesiumVectorTile 发布新版本
  12. 麦克劳林级数与麦克劳林公式(泰勒公式)
  13. 【爬虫进阶】易班登录加密逆向
  14. 2017lol服务器维修时间,lol年3月16日要维护多长时间2017_lol3.16维护时间公告_好特教程...
  15. Cartographer使用3D激光雷达建立2D导航图(概率栅格地图)
  16. 在Hbulider中点击事件会出现两次
  17. 如何在prometric(普尔文)网站上用信用卡预约微软考试
  18. 运营小红书账号的经验有哪些?这几个方面值得借鉴!
  19. java sanmu_Openfire支持视频了
  20. Edius 7 安装试用和破解方法

热门文章

  1. Zilliqa的设计构思 第1部分:网络分片
  2. ElasticSearch基础之批量操作(mget+mbulk)
  3. setUserVisibleHint-- fragment真正的onResume和onPause方法
  4. tomocat设置首次访问时的页面
  5. UNIX高级环境编程 第11、12章 线程同步及属性
  6. 理解CSRF(跨站请求伪造)
  7. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
  8. features its own
  9. CStatic控件的基本使用
  10. 舆情监测系统成为网络利器