韦东山二期驱动_IIC裸板驱动笔记

序言
一、硬件
开发板:优龙FS2410开发板(带AT24C02 EEPROM)
调试器:百问网EasyOpenJTAG V1
二、开发环境
虚拟机:VMware Workstation 12 Pro + Ubuntu 9.10
交叉编译工具: gcc 4.4.1, make 3.81
宿主机:Windows10专业版(版本号1809)

正文
2019-07-31
一、I2C协议简述
1、特点:多主,冲突检测和仲裁
2、起止信号
SCL高电平期间,SDA低跳变,即为开始信号。
SCL高电平期间,SDA高跳变,即为结束信号。
3、数据信号
SCL低电平期间,SDA允许变化
4、响应信号(用于确认地址或者数据)
接收器在第9个时钟周期,拉低SDA电平
注意:有3种情况是不发ACK信号的:
a)从机发现地址不匹配
b)从机无法接收更多数据
c)主机接收了最后一个字节的数据
5、暂停信号
主机或从机都可以拉低SCL来迫使对方进入等待状态
6、数据格式
S信号 | 从机地址 | R/W | A | 数据 | A | P信号

2019-08-02
一、今天测试了一下二期配套源码"18th_i2c"
1、编译烧写到板子上后,ssCOMM32上不显示任何信息
2、但如果在"嵌入式linux应用开发_光盘\hardware\i2c"的基础上修改(具体来说,把i2c.c,at24cxx.c,main.c从二期配套源码"18th_i2c"拷到"嵌入式linux应用开发_光盘\hardware\i2c"),则 ssCOMM32上能显示:
##### AT24CXX Menu #####
[R] Read AT24CXX
[W] Write AT24CXX
Enter your selection:
而且读写AT24C02都没有问题
通过比较两者的代码,发现原因是:二期"18th_i2c"的 nand.c 里为了支持大页读写,有 #define LARGE_NAND_PAGE。但优龙的板子的nandflash是k9f1208u0m,不支持大页。

二、碰到一个非常奇怪的问题:
在ubuntu里,修改main.c,屏蔽掉printf("\r\n##### AT24CXX Menu #####\r\n");后,编译烧写运行,居然ssCOMM32还是打印了出来##### AT24CXX Menu #####?
什么鬼?
折腾了2个多小时,始终没有头绪,明天再说吧。

2019-08-03
针对昨天遗留下来的奇怪问题,今天进行排查
i)在ubuntu上,用vim -b i2c.bin打开,发现确实已经删除了“##### AT24CXX Menu #####”,说明出问题的环节不在虚拟机
ii)怀疑是否因为windows的磁盘缓存未刷新导致的?遂把i2c.bin拷到windows10上的其它目录,然后用UE打开,发现仍然有“##### AT24CXX Menu #####”,说明不是磁盘缓存未刷新的原因,那么出问题的环节也不在宿主机
iii)怀疑是文件传输环节出了问题。遂改用U盘来把i2c.bin从ubuntu拷到windows10,然后用UE打开,这次不再出现“##### AT24CXX Menu #####”
iv)那么,出问题的环节应该就是文件传输,要么是vsftpd,要么是windows的ftp客户端(注:我目前用的是windows10 的资源管理器,最终发现确实是它的问题)。
vsftp不熟悉,所以先从容易排查的一端(即windows的资源管理器)入手。如果罪魁祸首确实是它,那么换个ftp客户端应该能解决问题,遂下载安装fileZilla client。
再用UE打开,果然不再出现“##### AT24CXX Menu #####”!
结论:如果把windows10的资源管理器用作ftp客户端,可能导致传输后的文件内容有问题。
不清楚这个问题是否具有普遍性,还是仅仅存在于Windows10专业版(版本号1809)?

2019-08-04
一、尝试用eclipse+OpenJTAG+OpenOCD的套路来调试代码
注1:参考资料:百问网OpenJTAG 调试器产品手册《Eclipse,OpenOCD,OpenJTAGv3.1 开发教程v5.pdf》
注2:以下套路适用于在lds连接脚本中直接把所有代码的运行地址都安排在0x30000000的情况
这样就不用担心make 加上-g选项后产生的符号表使init节超出4K(因为如果把init节安排在0地址处,则因s3c24xx的内部ram只有4K,所以init节最大只能4K),导致make会失败
- 此套路的优点:
可以基本实现代码的可视化调试
- 此套路的不足:
a)可能需要修改代码(因为当从nandflash里运行时,head.S实际位于0地址内存处,所以现在head.S里(包括bl间接调用的)所有的代码必须保证是位置无关的)
好在涉及到要修改的代码基本上都和初始化相关,相对稳定,所以修改工作基本上属于一劳永逸的工作。
b)调试的时候需要屏蔽掉head.S里的CopyCode2SDRAM(因为调试时,gdb会直接把代码加载到运行地址(此例即0x30000000)处,所以这个工作不需要在程序中做了),而调试完毕后,烧写到nand里运行时,还要恢复head.S里的CopyCode2SDRAM
c)不太稳定,OpenOCD有时会崩掉 :-(

具体步骤:
step1)head.S屏蔽掉CopyCode2SDRAM
step2)设置eclipse的debug configuration:
1694274-20190804223616722-980454223.png
1694274-20190804222249477-1138747034.png
1694274-20190804222412218-250281669.png
1694274-20190804222439660-567530825.png

step3)OpenJTAG连接开发板和电脑
电脑启动OpenOCD,点“connect”,连接开发板
1694274-20190804222541662-689488542.png

step4)eclipse启动调试
1694274-20190804222636318-230638710.png

转载于:https://www.cnblogs.com/normalmanzhao2003/p/11300211.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MY_IIC_DRV是指IIC总线驱动程序。它是用于在嵌入式系统中实现I2C通信的软件模块。I2C是一种串行通信协议,常用于连接芯片和外设。引用中提到了MY_IIC_DRV,但没有提供关于它的具体信息。根据我的专业知识,我可以告诉你I2C总线驱动程序的一般作用和使用方法。 I2C总线驱动程序的主要功能是控制和管理I2C总线的通信。它可以实现发送和接收数据的功能,并且提供了一系列的API函数供用户调用。使用MY_IIC_DRV可以轻松地配置和控制I2C总线,从而实现与其他设备的通信。 使用MY_IIC_DRV进行I2C通信的步骤通常包括以下几个部分: 1. 初始化:在使用之前,需要对I2C总线进行初始化设置。这包括配置引脚、设置时钟和选择通信速率等。 2. 发送数据:通过调用相应的函数,将要发送的数据写入发送缓冲区,并指定目标设备的地址。 3. 接收数据:通过调用相应的函数,从接收缓冲区中读取目标设备发送的数据。 4. 错误处理:在通信过程中,可能会出现一些错误情况,如传输失败、设备无响应等。MY_IIC_DRV通常提供了相应的错误处理函数,可以根据需要进行处理。 总之,MY_IIC_DRV是一个用于实现I2C总线通信的软件模块,可以方便地进行配置和控制。通过使用该驱动程序,您可以轻松实现与其他设备之间的数据交换。如需获取具体的MY_IIC_DRV软件包或了解更多详细信息,请参考引用和引用提供的链接。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值