SSD1306的i2c驱动程序

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
6个员额/ 0个新员额
最后发表
肯庄
离线
最后看到:2年9个月前
加入:2016-10-15 05:40
SSD1306的i2c驱动程序

亲爱的先生,
我只是想用SSD1306驱动初始化我的OLED,使用外设项目中的i2c演示,然而它不工作,i2c通道只发送0x00无论我在代码中改变什么。请帮助。

代码:
空白demo_i2c_init(空白)

Static const i2c_config CFG = {
。speed = HW_I2C_SPEED_STANDARD,
.mode = HW_I2C_MODE_MASTER,
.addr_mode = HW_I2C_ADDRESSING_7B,
};

hw_i2c_init (HW_I2C1 cfg);

将srand (OS_GET_TICK_COUNT ());

如果(config_need) {
int犯错;
i2c_device开发;

dev = ad_i2c_open (SSD1306);

呃= SSD1306_power_on (dev);
如果(err) {
printf(换行符"错误SSD1306_power_on 0x%X", err);

ad_i2c_close (dev);
config_need = false;


int SSD1306_power_on (i2c_device dev)

/ / OS_ENTER_CRITICAL_SECTION ();
ad_i2c_device_acquire (dev);
SSD1306_write_i (dev, 0机加区);
0 x00 SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 x10);
0 x40 SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 xb0);
SSD1306_write_i (dev, 0 x81);
SSD1306_write_i (dev, 0 xaf);
SSD1306_write_i (dev, 0 xa1);
SSD1306_write_i (dev, 0 xa6);
SSD1306_write_i (dev, 0 xa8);
0 x0f SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 xc8);
SSD1306_write_i (dev, 0 xd3);
0 x00 SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 xd5);
SSD1306_write_i (dev, 0 x80);
SSD1306_write_i (dev, 0 xd9);
0将SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 xda);
0 x02 SSD1306_write_i (dev);
0 xdb SSD1306_write_i (dev);
0 x40 SSD1306_write_i (dev);
SSD1306_write_i (dev, 0 x8d);
SSD1306_write_i (dev, 0 x10);
SSD1306_write_i (0 xaf);
ad_i2c_device_release (dev);
/ / OS_LEAVE_CRITICAL_SECTION ();
返回true;

static int SSD1306_write_i(i2c_device dev,uint8_t val)

Uint8_t op[2] = {0x12,val};

返回ad_i2c_write(dev, op, sizeof(op));

设备:
肯庄
离线
最后看到:2年9个月前
加入:2016-10-15 05:40
#如果CFG_DEMO_OLED_SSD1306

#如果CFG_DEMO_OLED_SSD1306
/*湿度和压力组合传感器*/
I2C_SLAVE_DEVICE(I2C1, SSD1306, 0x78, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_STANDARD);
# endif

MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 34
嗨,肯庄,

嗨,肯庄,

我不要看到什么毛病你已经粘贴的代码,你正确地打开适配器,然后你开始与i2c的交互,在resource_aquire ad_i2c_open以来()函数并不是必需的()函数调用resource_acquire()函数只要你有CONFIG_I2C_EXCLUSIVE_OPEN设置为1。我想您已经在custom_config_qspi.h文件中包含了dg_configI2C_ADAPTER和dg_config_USE_HW_I2C,并且您还在pher_setup()函数中为适当的i2c功能配置了相应的管脚?为例。

hw_gpio_set_pin_function(HW_GPIO_PORT_1, HW_GPIO_PIN_6, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_I2C_SCL);
hw_gpio_set_pin_function(HW_GPIO_PORT_1, HW_GPIO_PIN_7, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_I2C_SDA);

我也没有得到任何线索从捕获,你已经附加,我没有看到任何东西,这将表明一个i2c事务已经开始,我没有看到地址,你已经设置到设备或任何东西,这将表明一个交互已经开始。

由于MT_dialog

肯庄
离线
最后看到:2年9个月前
加入:2016-10-15 05:40
当然我们有

当然我们有如下设置,如果我修改引脚到端口3_5(CLK)和1_2(SDA)会有什么问题吗?唯一不同的是,我修改了pxp_reporter项目,在main.c上的函数“periph_init”中添加以下代码

#定义dg_configUSE_HW_I2C (1)
#定义dg_configI2C_ADAPTER (1)

#定义CFG_DEMO_HW_I2C (1)

#if CFG_DEMO_HW_I2C || CFG_AD_I2C_1 . #if CFG_DEMO_HW_I2C ||
/ * I2C1 * /
#定义CFG_GPIO_I2C1_SCL_PORT (HW_GPIO_PORT_3)
#定义CFG_GPIO_I2C1_SCL_PIN (HW_GPIO_PIN_5)
#定义CFG_GPIO_I2C1_SDA_PORT (HW_GPIO_PORT_1)
#定义CFG_GPIO_I2C1_SDA_PIN (HW_GPIO_PIN_2)
# endif

#如果CFG_DEMO_HW_I2C
/ * I2C * /
hw_gpio_set_pin_function (CFG_GPIO_I2C1_SCL_PORT CFG_GPIO_I2C1_SCL_PIN、HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_I2C_SCL);
hw_gpio_set_pin_function (CFG_GPIO_I2C1_SDA_PORT CFG_GPIO_I2C1_SDA_PIN、HW_GPIO_MODE_INPUT HW_GPIO_FUNC_I2C_SDA);
hw_gpio_configure_pin (CFG_GPIO_TFT_RES_PORT CFG_GPIO_TFT_RES_PIN、HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_GPIO, 1);
hw_gpio_configure_pin (CFG_GPIO_TQ_PORT CFG_GPIO_TQ_PIN、HW_GPIO_MODE_OUTPUT HW_GPIO_FUNC_GPIO, 1);
demo_i2c_init ();
# endif

MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 34
嗨,肯庄,

嗨,肯庄,

如果你使用的是带有端口3的QFN包,你应该没问题。既然你正在使用BLE项目,试着做以下事情,我认为使用ble_adv的例子会更有效,因为这是一个更简单的例子:

  • 按照我上面提到的方式配置引脚(只需使用所需的引脚和功能调用hw_gpio_set_pin_function())。
  • demo_i2c_init()不是必需的,因为配置将在总线获取期间由适配器应用(因为您使用了I2C_SLAVE_DEVICE宏)。
  • 在BLE任务(在我的例子中是ble_adv_demo_task)的循环之前,你可以应用以下代码:
  • dev = ad_i2c_open (SSD1306);//打开I2C设备
    ad_i2c_write (dev addr 1);//执行一个字节的写入
    ad_i2c_read (dev,及地址,1);//执行一个字节的读取
  • 即使没有与外设进行通信,在I2C总线上也应该显示为外设设置的设备地址,即使该设备不在总线的另一端。

因此,请尝试以上与I2C外设连接或不连接,并检查是否至少68x推动总线上的设备地址。

由于MT_dialog

peter.de.nijs@loqed
离线
最后看到:3年2个月前
加入:2017-10-20 14:32
我用的是SSD1306

我用的是SSD1306
没有华丽的动画。
你能给我提供DA1468x的运行库吗?

会节省我一些时间:)

关于
Peter de Nijs