資源簡介
使用這個測試案例時確保i2c總線頻率為50khz,代碼中的設備號根據實際情況修改,我用了i2c-1,驅動命令字不用修改

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“atsha204a_comm.h“
#define?ATSHA204_ADDR?(0xc8)
static?unsigned?char?(*atsha204a_i2c_read)(unsigned?char?unsigned?char?unsigned?char?*?int);
static?unsigned?char?(*atsha204a_i2c_write)(unsigned?char?unsigned?char?unsigned?char?*?int);
int?atsha204a_set_i2c_func(
????unsigned?char?(*i2c_read)(unsigned?char?unsigned?char?unsigned?char?*?int)
????unsigned?char?(*i2c_write)(unsigned?char?unsigned?char?unsigned?char?*?int)
)
{
????if?(i2c_read?==?NULL?||?i2c_write?==?NULL)?{
????????return?1;
????}
????atsha204a_i2c_read?=?i2c_read;
????atsha204a_i2c_write?=?i2c_write;
????return?0;
}
static?void?msleep(int?msec)
{
????usleep(msec?*?1000);
}
/*
?*?CRC計算,從atsha204代碼庫移植過來
?*/
static?void?sha204c_calculate_crc(unsigned?char?length?unsigned?char?*data?unsigned?char?*crc)
{
????unsigned?char?counter;
????unsigned?short?crc_register?=?0;
????unsigned?short?polynom?=?0x8005;
????unsigned?char?shift_register;
????unsigned?char?data_bit?crc_bit;
????for?(counter?=?0;?counter?????{
????????for?(shift_register?=?0x01;?shift_register?>?0x00;?shift_register?<<=?1)
????????{
????????????data_bit?=?(data[counter]?&?shift_register)???1?:?0;
????????????crc_bit?=?crc_register?>>?15;
????????????//?Shift?CRC?to?the?left?by?1.
????????????crc_register?<<=?1;
????????????if?((data_bit?^?crc_bit)?!=?0)
????????????{
????????????????crc_register?^=?polynom;
????????????}
????????}
????}
????crc[0]?=?(unsigned?char)?(crc_register?&?0x00FF);
????crc[1]?=?(unsigned?char)?(crc_register?>>?8);
}
/*
?*?CRC校驗,從atsha204代碼庫移植過來
?*/
static?unsigned?char?sha204c_check_crc(unsigned?char?length?unsigned?char??*data)
{
????unsigned?char??crc[2];
????sha204c_calculate_crc(length-2?data?crc);
????return?(crc[0]?==?data[length?-?2]?&&?crc[1]?==?data[length?-?1])???SHA204_SUCCESS?:?SHA204_BAD_CRC;
}
static?int?atsha204a_send_command(struct?atsha204a_command_packet?*command_packet)
{
????unsigned?char?command_buffer_len?=?7?+?command_packet->data_len;
????unsigned?char?command_buffer[48];
????if?(command_packet->data_len?>?32)
????????return?SHA204_INVALID_SIZE;
????command_buffer[0]?=?command_buffer_len;
????command_buffer[1]?=?command_packet->op_code;
????command_buffer[2]?=?command_packet->param1;
????command_buffer[3]?=?command_packet->param2[0];
????command_buffer[4]?=?command_packet->param2[1];
????if(command_packet->data_len?>?0)?{
????????memcpy(command_buffer+5?command_packet->data?command_packet->data_len);
????}
????sha204c_calculate_crc(command_buffer_len-2?command_buffer?command_buffer+command_buffer_len-2);
????atsha204a_i2c_write(ATSHA204_ADDR?0x03?command_buffer?command_buffer_len);
????return?0;
}
/*
?*?讀取操作命令的response內容,讀取的地址都為0x00
?*/
static?int?atsha204a_recv_response(unsigned?char?length?unsigned?char?*response_data)
{
????atsha204a_i2c_read(ATSHA204_ADDR?0x00?re
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3895??2018-03-07?12:40??TX2-I2C_ATSHA201A\atsha204a_comm.c
?????文件???????2418??2018-03-07?12:40??TX2-I2C_ATSHA201A\atsha204a_comm.h
?????文件???????1690??2018-09-10?16:34??TX2-I2C_ATSHA201A\atsha204a_i2c.c
?????文件????????253??2018-03-07?12:40??TX2-I2C_ATSHA201A\atsha204a_i2c.h
?????文件????????747??2018-03-07?12:40??TX2-I2C_ATSHA201A\atsha204a_test.c
?????文件????????228??2018-03-06?16:45??TX2-I2C_ATSHA201A\Makefile
?????目錄??????????0??2018-09-10?16:34??TX2-I2C_ATSHA201A
-----------?---------??----------?-----??----
?????????????????9231????????????????????7
- 上一篇:SDK畫圖程序
- 下一篇:apk方式更換主題包括多個頁面更換
評論
共有 條評論