【前言】
EV76S68A外设中非常重要的外设为IIC,他加载在SERCOM2中,使用MCC可以非常简单的配置他。这一篇我将分享如何使用。
【原理图】
在官方的用户手册中,可以看只有SERCOM2可以配置为IIC:
PA12为IIC的SDA,PA13为IIC的SCL接口。
【MCC配置】
打开MCC添加SERCOM2到工程中,并配置其为Master,速度配置为400K
配置好后生成代码
打开plib_sercom2_i2c_masters.h中可以看到有对I2C操作的所有功能函数。
我们在驱动OLED中,需要使用到的为SERCOM2_I2C_Initialize进行外设的初始化,以及Write就行了,通过源码可以看到我们需要传入的参数与输出的参数:
bool SERCOM2_I2C_Write(uint16_t address, uint8_t* wrData, uint32_t wrLength) { return SERCOM2_I2C_XferSetup(address, wrData, wrLength, NULL, 0, false, false); }
【移植OLED屏】
我找到ssd1306的驱动包,添加进工程中。
【添加测试程序】
【填坑】
我按照以上工程下载到开发板后,即发现没有按预期的效果点亮OLED,于是上逻辑分析仪查看,发现只发送了从机地址后,接着没有发剩余的数据。经过各种查找,最后在论坛中找到了一个同样现象的:
上面是有人提出在发送命令后需要延时一会。
于是我修改程序如下:
然后居然可以了。
究其原因,是可能IIC发送需要一定的时间。
【实验效果】
【总结】
通过以上IIC的配置,ssd1306的代码移植,以及问题查找,终于驱动好了OLED屏。