【Netduino3-WIFI】【原创】2.完善,SD卡的功能扩展

  • LiuYang
  • LV5工程师
  • |      2015-11-10 07:31:02
  • 浏览量 993
  • 回复:4
    之前没有做过.Net micro framwork的东西,以为和C开发一样,在使用前都需要自己写驱动。经过请教本坛东方青才知道,原来NetDuino3-WIFI已经自动挂载好SD卡,只要直接对文件操作就行了,不需要重复挂载。难怪我之前所做的那些MountSD会报错。

    搞明白了这一点就好办了,剩下的都是功能的实现。其实我更喜欢自己动手控制初始化或释放,而且对这些托管语言的自动释放内存不放心。题外话。


    对文件和文件夹的操作我也不再重复,本坛帖子已有说明。不过呢,我扩展了一些功能,比如获取SD卡的信息,还有自动检测卡的插入和弹出。

【Netduino3-WIFI】【原创】2.完善,SD卡的操作

    SD类的实现。SD类增加了绑定两个事件,同时对外提供这两个事件的委托。当SD类创建时即绑定事件,然后等待事件的触发。当插入时,获取SD的根路径,得到各种信息;弹出后清理这些信息。


【Netduino3-WIFI】【原创】2.完善,SD卡的操作


    获取卡的信息是由VolumeInfo这个类来实现的,引用Microsoft.SPOT.IO后可以使用,里面包括了一些信息的检测和对SD的操作,比如我最喜欢的Format,只是还没来得及试验。在操作SD卡读写文件之前,应该先检测一下信息来判断能否操作成功,这样更保险一些。
    VolumeInfo类是不需要创建的,它可以用静态函数VolumeInfo.GetVolumes()来获得所有已挂载磁盘的信息。不过现在只有一个SD,所以直接来使用第一个,然后就可以调用这些函数了。


【Netduino3-WIFI】【原创】2.完善,SD卡的操作


    另外一个功能就是自动检测卡插入和弹出事件。首先看原理图,MICRO_SD_CARD_INSERTED引脚已经被接入,应该是能够使用的。既然SD卡的Mount功能固件已经实现了,这个事件按理说也应该被实现,直接使用试一试看看行不行。


    要响应这个事件,需要通过RemovableMedia类来添加自己的函数,这个类也在Microsoft.SPOT.IO中。在SD类构造函数中绑定两个函数,分别是插入和弹出,来响应并分别执行对应的代码。我的做法是,如果检测到了卡的插入,就去设置root路径,获取卡的信息;如果检测到弹出,就把这些信息清除掉。做完这些工作后再分别提供两个对外的委托,让调用者可以在扩展自己的功能。对外的事件接口由delegate来完成。

    Netduino只理论上指支持不大于2G的TF卡,翻箱倒柜居然找到了一个老古董512M的,就拿它试验吧。

【Netduino3-WIFI】【原创】2.完善,SD卡的操作

    程序的主函数。结合LCD显示屏,把卡信息显示出来。插入卡时显示Mounted,弹出后显示not Mounted,并用颜色区分。程序中用了一个全局变量当作标志,避免LCD被重复调用。在这里作用显示不出来,因为还没有加上其他的功能,不会造成冲突。另外这个全局变量可以用lock来解决,但是试验发现加上lock后显示Wifi的信息不正常了,所以临时去掉了,后面再去找原因。
    

【Netduino3-WIFI】【原创】2.完善,SD卡的操作

    插入SD的显示

【Netduino3-WIFI】【原创】2.完善,SD卡的操作

    弹出SD的显示

    最后提示一点,NetDuino3没有外扩内存,只靠片内那点可怜的内存,还要刨除运行库占用的部分,留给用户的已经不多了,所以在读写文件的时候不可能将整个文件读到内存中再操作,和PC上开发最大的区别就是这里了。而且如果定义的数组过大,在编译时也会给出警告信息的,解决办法你懂的。


  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:3
东方青 2015-11-10
灰常给力!挺挺挺!
0   回复
举报
发布
LiuYang 2015-11-10
明天还有更好的
0   回复
举报
发布
灵澈 2015-11-10
帖子很不错哦
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子