韦东山二期驱动_IIC裸板驱动笔记(修改版)

发布时间:2024-07-11  

一、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应用开发_光盘hardwarei2c"的基础上修改(具体来说,把i2c.c,at24cxx.c,main.c从二期配套源码"18th_i2c"拷到"嵌入式linux应用开发_光盘hardwarei2c"),则 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("rn##### AT24CXX Menu #####rn");后,编译烧写运行,居然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有时会崩掉 :-(

具体步骤:

step0)确保开发板的跳线设置为了从NAND启动
step1)head.S屏蔽掉CopyCode2SDRAM
step2)设置eclipse的debug configuration:

图1


图2


图3


图4


step3)OpenJTAG连接开发板和电脑
电脑启动OpenOCD,点“connect”,连接开发板

图5


step4) Work Dir设置为init.bin(下载)所在的目录,然后 点“telnet”按钮,进入telnet客户端:

          输入以下命令:

          load_image init.bin 0x0

          resume 0x0

          halt

注:为了简化调试流程,可以把以上这三句话添加到s3c2410_gdb.init文件(参考上文图2)里:

        target remote localhost:3333

        monitor halt

        monitor arm920t cp15 2 0

        monitor step

        monitor load_image E:/eclipse_projects/init.bin 0x0

        monitor resume 0x0

        monitor halt

        monitor wait_halt

        image

       












图6

      

step5) eclipse启动调试

image

图7


注:Console窗口里会出现:Program received signal SIGINT, Interrupt.原因暂不明,可能是因为当初安装的 tool chains

“gcc-arm-none-eabi-4_7-2013q2-20130614-win32.exe” 对于windows10的兼容性不太好。

不过好像并不影响调试。


step8) 调试完成后,恢复head.S被屏蔽掉的CopyCode2SDRAM


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>