test

main.cpp

Committer:
TVA
Date:
2021-02-08
Revision:
0:8491d8911089
Child:
1:397813654863

File content as of revision 0:8491d8911089:

/* mbed Microcontroller Library
 * Copyright (c) 2019 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 */

#include "mbed.h"
#include "platform/mbed_thread.h"


// Blinking rate in milliseconds
#define BLINKING_RATE_MS                                                    500

#define RST_PIN   P5_6
#define MFIO_PIN  P5_4

I2C i2c(P3_4, P3_5);

const int addr = 0xAA;

void scanI2C() {
        printf("Searching for I2C devices...\n\r");
 
        int count = 0;
        for (int address = 0; address < 255; address +=2) { // check only for device's read addres
            if (!i2c.write(address, NULL, 0)) { // 0 returned is ok
                printf("I2C device found at address 0x%02X (0x%02X in 8-bit)\n\r", address >> 1, address);  // the address is without LSB, which is R/W flag. shoft it right once
                count++;
            }
            thread_sleep_for(1);
        }
        if (count)
            printf("%d", count);
        else
            printf("No");
        printf(" device%c found\n\r\n", count == 1?'\0':'s');
}

int main()
{   
    i2c.frequency(400000);
    char cmd[4];
    
    scanI2C();
    
    // Initialise the digital pin LED1 as an output
    DigitalOut led(LED1);
    DigitalOut rst(RST_PIN);
    DigitalOut mfio(MFIO_PIN);
    
    mfio = 1;
    rst = 1;
    thread_sleep_for(10);
    rst = 0;
    thread_sleep_for(10);
    rst = 1;
    thread_sleep_for(1500);

    while (true) {
        cmd[0] = 0x02;
        cmd[1] = 0x00;
        i2c.write(addr, cmd, 2);
        thread_sleep_for(2);
        
        cmd[0] = 0x00;
        cmd[1] = 0x00;
        i2c.read(addr, cmd, 2);
        printf("1: %x %x\n", cmd[0], cmd[1]);
        
        
        cmd[0] = 0xFF;
        cmd[1] = 0x03;
        i2c.write(addr, cmd, 2);
        thread_sleep_for(2);
        
        cmd[0] = 0x00;
        cmd[1] = 0x00;
        cmd[2] = 0x00;
        cmd[3] = 0x00;
        i2c.read(addr, cmd, 4);
        printf("2: %d %d %d %d\n", cmd[0], cmd[1], cmd[2], cmd[3]);

        /*rst =! rst;
        mfio =! mfio;*/
        thread_sleep_for(BLINKING_RATE_MS);
        led = !led;
    }
}