SSD1306的I2C驱动程序

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
6个帖子/ 0新
最后一篇
肯崇角
离线
最后一次露面:2年9个月前
加入:2016-10-15 05:40
SSD1306的I2C驱动程序

尊敬的先生,
我只想用SSD1306驱动程序incored我的OLED,在外围设备中使用I2C演示,但它不起作用,无论我在代码中更改了什么,I2C通道都只发送0x00。请帮忙。

代码:
void demo_i2c_init(void)
{

静态const i2c_config cfg = {
.speed = hw_i2c_speed_standard,
.mode = hw_i2c_mode_master,
.ddr_mode = hw_i2c_addressing_7b,
};

hw_i2c_init(hw_i2c1,cfg);

srand(os_get_tick_count());

if(config_need){
呃;
i2c_device dev;

dev = ad_i2c_open(SSD1306);

err = ssd1306_power_on(dev);
如果(错误){
printf(换行符“错误ssd1306_power_on 0x%x”,错误);
}

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,0xAE);
ssd1306_write_i(dev,0x00);
SSD1306_WRITE_I(DEV,0x10);
SSD1306_WRITE_I(DEV,0x40);
ssd1306_write_i(dev,0xb0);
SSD1306_WRITE_I(DEV,0x81);
SSD1306_WRITE_I(DEV,0xAF);
SSD1306_WRITE_I(DEV,0xA1);
SSD1306_WRITE_I(DEV,0xA6);
SSD1306_WRITE_I(DEV,0xA8);
ssd1306_write_i(dev,0x0f);
SSD1306_WRITE_I(DEV,0xC8);
SSD1306_WRITE_I(DEV,0xD3);
ssd1306_write_i(dev,0x00);
SSD1306_WRITE_I(DEV,0xD5);
SSD1306_WRITE_I(DEV,0x80);
SSD1306_WRITE_I(DEV,0xD9);
SSD1306_WRITE_I(DEV,0x22);
SSD1306_WRITE_I(DEV,0xDA);
SSD1306_WRITE_I(DEV,0x02);
SSD1306_WRITE_I(DEV,0xDB);
SSD1306_WRITE_I(DEV,0x40);
SSD1306_WRITE_I(DEV,0x8D);
SSD1306_WRITE_I(DEV,0x10);
SSD1306_WRITE_I(0xAF);
ad_i2c_device_release(dev);
// os_leave_critical_section();
返回真;
}

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
#if cfg_demo_oled_ssd1306.

#if cfg_demo_oled_ssd1306.
/ *组合湿度和压力传感器* /
i2c_slave_device(i2c1,ssd1306,0x78,hw_i2c_addressing_7b,hw_i2c_speed_standard);
#万一

mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11: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,并且您还将相应的引脚配置为periph_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”中添加以下代码

#define dg_configuse_hw_i2c(1)
#define dg_configi2c_adapter(1)

#define cfg_demo_hw_i2c(1)

#if cfg_demo_hw_i2c ||cfg_ad_i2c_1.
/ * i2c1 * /
#define cfg_gpio_i2c1_scl_port(hw_gpio_port_3)
#define cfg_gpio_i2c1_scl_pin(hw_gpio_pin_5)
#define cfg_gpio_i2c1_sda_port(hw_gpio_port_1)
#define cfg_gpio_i2c1_sda_pin(hw_gpio_pin_2)
#万一

#if 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();
#万一

mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11: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
我正在使用de ssd1306

我正在使用de ssd1306
没有花哨的动画。
您可以为我提供一个针对DA1468x的运行lib吗?

会救我一些时间:)

带着敬意
Peter de Nijs.