找一份 jtag.host文件
时间: 2023-12-04 13:06:06 浏览: 169
我不清楚您指的具体是哪一份文件。如果您需要使用 jtag.host 进行在线调试,您可以访问 jtag.host 官网,注册账号并登录后就可以使用了。如果您需要在本地使用 JTAG/SWD 调试工具,您可以下载对应的调试适配器驱动和调试工具软件,如 SEGGER J-Link 调试器和 Keil MDK-ARM 等。
相关问题
jtag_host.h源码
jtag_host.h是JTAG Host库的头文件,主要用于与JTAG设备进行通信。以下是jtag_host.h的源代码:
```
#ifndef __JTAG_HOST_H__
#define __JTAG_HOST_H__
#include <stdint.h>
#define JTAG_HOST_BUF_SIZE 1024
typedef struct {
uint8_t *buf; // 数据缓存区
uint32_t buf_size; // 缓存区大小
uint32_t index; // 当前写入的位置
} jtag_host_buf_t;
typedef struct {
uint8_t tms; // TMS信号
uint8_t tdi; // TDI信号
uint8_t tdo; // TDO信号
uint8_t trst; // TRST信号
uint8_t srst; // SRST信号
} jtag_host_signal_t;
typedef struct {
uint32_t freq; // JTAG时钟频率
uint32_t tck_delay; // TCK延时
uint32_t trst_delay; // TRST延时
uint32_t srst_delay; // SRST延时
uint32_t timeout; // 超时时间
uint32_t retry; // 重试次数
} jtag_host_cfg_t;
typedef struct {
jtag_host_signal_t signal; // JTAG信号
uint32_t tck_freq; // TCK频率
uint32_t tck_div; // TCK分频
jtag_host_cfg_t cfg; // JTAG Host配置
} jtag_host_t;
/**
* @brief JTAG Host初始化
*
* @param jtag JTAG Host对象指针
* @param buf 数据缓存区
* @param size 缓存区大小
*/
void jtag_host_init(jtag_host_t *jtag, uint8_t *buf, uint32_t size);
/**
* @brief JTAG Host释放
*
* @param jtag JTAG Host对象指针
*/
void jtag_host_free(jtag_host_t *jtag);
/**
* @brief JTAG Host连接
*
* @param jtag JTAG Host对象指针
*
* @return true 连接成功
* false 连接失败
*/
bool jtag_host_connect(jtag_host_t *jtag);
/**
* @brief JTAG Host断开连接
*
* @param jtag JTAG Host对象指针
*/
void jtag_host_disconnect(jtag_host_t *jtag);
/**
* @brief JTAG Host写入数据
*
* @param jtag JTAG Host对象指针
* @param data 数据
* @param size 数据大小
*
* @return true 写入成功
* false 写入失败
*/
bool jtag_host_write(jtag_host_t *jtag, uint8_t *data, uint32_t size);
/**
* @brief JTAG Host读取数据
*
* @param jtag JTAG Host对象指针
* @param data 数据
* @param size 数据大小
*
* @return true 读取成功
* false 读取失败
*/
bool jtag_host_read(jtag_host_t *jtag, uint8_t *data, uint32_t size);
/**
* @brief JTAG Host写入并读取数据
*
* @param jtag JTAG Host对象指针
* @param tx_data 写入数据
* @param tx_size 写入数据大小
* @param rx_data 读取数据
* @param rx_size 读取数据大小
*
* @return true 写入并读取成功
* false 写入并读取失败
*/
bool jtag_host_write_read(jtag_host_t *jtag, uint8_t *tx_data, uint32_t tx_size, uint8_t *rx_data, uint32_t rx_size);
#endif /* __JTAG_HOST_H__ */
```
该头文件中定义了JTAG Host库的结构体和函数,包括:
- jtag_host_buf_t:数据缓存区结构体,用于存储JTAG Host传输的数据。
- jtag_host_signal_t:JTAG信号结构体,包括TMS、TDI、TDO、TRST和SRST等信号。
- jtag_host_cfg_t:JTAG Host配置结构体,包括JTAG时钟频率、TCK延时、TRST延时、SRST延时、超时时间和重试次数等参数。
- jtag_host_t:JTAG Host对象结构体,包括JTAG信号、TCK频率、TCK分频和JTAG Host配置等参数。
- jtag_host_init:JTAG Host初始化函数,用于初始化JTAG Host对象。
- jtag_host_free:JTAG Host释放函数,用于释放JTAG Host对象。
- jtag_host_connect:JTAG Host连接函数,用于连接JTAG设备。
- jtag_host_disconnect:JTAG Host断开连接函数,用于断开JTAG设备连接。
- jtag_host_write:JTAG Host写入数据函数,用于向JTAG设备写入数据。
- jtag_host_read:JTAG Host读取数据函数,用于从JTAG设备读取数据。
- jtag_host_write_read:JTAG Host写入并读取数据函数,用于向JTAG设备写入数据并读取返回的数据。
这些函数提供了基本的JTAG通信功能,可用于JTAG设备的调试和测试等应用场景。
JTAG_host.c源码
以下是一个简单的JTAG主机(JTAG_host.c)的示例代码,用于通过JTAG接口与目标设备进行通信。
```c
#include <stdio.h>
#include <stdint.h>
#define TCK 0x01 // JTAG时钟线
#define TMS 0x02 // JTAG状态线
#define TDI 0x04 // JTAG数据输入线
#define TDO 0x08 // JTAG数据输出线
void jtag_init(void);
void jtag_shift_ir(uint8_t *data, uint32_t count);
void jtag_shift_dr(uint8_t *data_in, uint8_t *data_out, uint32_t count);
int main(void) {
uint8_t ir_data[4] = {0x3, 0x2, 0x1, 0x0};
uint8_t dr_data_in[16] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF};
uint8_t dr_data_out[16] = {0};
jtag_init();
// 将IR移位
jtag_shift_ir(ir_data, 4);
// 将DR移位
jtag_shift_dr(dr_data_in, dr_data_out, 16);
return 0;
}
void jtag_init(void) {
// 初始化JTAG接口
// ...
}
void jtag_shift_ir(uint8_t *data, uint32_t count) {
uint32_t i;
uint8_t bit;
// 将TMS线拉高
// ...
for (i = 0; i < count; i++) {
// 将TDI线写入IR位
bit = (data[i] >> 0) & 0x01;
// ...
bit = (data[i] >> 1) & 0x01;
// ...
bit = (data[i] >> 2) & 0x01;
// ...
bit = (data[i] >> 3) & 0x01;
// ...
// 将TMS线拉低
// ...
// 将TMS线拉高
// ...
}
// 最后一位TMS线拉高
// ...
}
void jtag_shift_dr(uint8_t *data_in, uint8_t *data_out, uint32_t count) {
uint32_t i;
uint8_t bit_in, bit_out;
// 将TMS线拉高
// ...
for (i = 0; i < count; i++) {
// 将TDI线写入DR位并读取TDO线
bit_in = (data_in[i] >> 0) & 0x01;
// ...
bit_out = read_tdo();
data_out[i] |= (bit_out << 0);
bit_in = (data_in[i] >> 1) & 0x01;
// ...
bit_out = read_tdo();
data_out[i] |= (bit_out << 1);
bit_in = (data_in[i] >> 2) & 0x01;
// ...
bit_out = read_tdo();
data_out[i] |= (bit_out << 2);
bit_in = (data_in[i] >> 3) & 0x01;
// ...
bit_out = read_tdo();
data_out[i] |= (bit_out << 3);
// 将TMS线拉低
// ...
// 将TMS线拉高
// ...
}
// 最后一位TMS线拉高
// ...
}
```
请注意,此示例代码仅提供了一个基本的JTAG通信框架。实际使用时,您需要根据您的目标设备和应用程序的需求进行必要的修改和扩展。
阅读全文