42#define CHIP_NAME "WCH CH9120"
43#define MANUFACTURER_NAME "WCH"
44#define SUPPLY_VOLTAGE_MIN 2.1f
45#define SUPPLY_VOLTAGE_MAX 3.6f
46#define MAX_CURRENT 100.0f
47#define TEMPERATURE_MIN -40.0f
48#define TEMPERATURE_MAX 85.0f
49#define DRIVER_VERSION 1000
54#define CH9120_CMD_CHIP_VERSION 0x01
55#define CH9120_CMD_RESET 0x02
56#define CH9120_CMD_GET_STATUS 0x03
57#define CH9120_CMD_SAVE_TO_EEPROM 0x0D
58#define CH9120_CMD_RUN_AND_RESET 0x0E
59#define CH9120_CMD_EXIT 0x5E
60#define CH9120_CMD_SET_MODE 0x10
61#define CH9120_CMD_SET_IP 0x11
62#define CH9120_CMD_SET_NETMASK 0x12
63#define CH9120_CMD_SET_GATEWAY 0x13
64#define CH9120_CMD_SET_PORT 0x14
65#define CH9120_CMD_SET_DST_IP 0x15
66#define CH9120_CMD_SET_DST_PORT 0x16
67#define CH9120_CMD_RANDOM_PORT 0x17
68#define CH9120_CMD_SET_BAUD 0x21
69#define CH9120_CMD_SET_CONFIG 0x22
70#define CH9120_CMD_SET_TIMEOUT 0x23
71#define CH9120_CMD_SET_DISCONNECT 0x24
72#define CH9120_CMD_SET_LEN 0x25
73#define CH9120_CMD_SET_FLUSH 0x26
74#define CH9120_CMD_DHCP 0x33
75#define CH9120_CMD_GET_MODE 0x60
76#define CH9120_CMD_GET_IP 0x61
77#define CH9120_CMD_GET_NETMASK 0x62
78#define CH9120_CMD_GET_GATEWAY 0x63
79#define CH9120_CMD_GET_PORT 0x64
80#define CH9120_CMD_GET_DST_IP 0x65
81#define CH9120_CMD_GET_DST_PORT 0x66
82#define CH9120_CMD_GET_BAUD 0x71
83#define CH9120_CMD_GET_CONFIG 0x72
84#define CH9120_CMD_GET_TIMEOUT 0x73
85#define CH9120_CMD_GET_DISCONNECT 0x74
86#define CH9120_CMD_GET_LEN 0x75
87#define CH9120_CMD_GET_FLUSH 0x76
105 uint8_t *param, uint16_t len,
106 uint16_t pre_delay, uint16_t timeout)
118 handle->
buf[0] = 0x57;
119 handle->
buf[1] = 0xAB;
120 memcpy(&handle->
buf[2], param, len);
193 uint8_t *param, uint16_t len,
194 uint8_t *out, uint16_t out_len,
195 uint16_t pre_delay, uint16_t timeout)
208 handle->
buf[0] = 0x57;
209 handle->
buf[1] = 0xAB;
210 memcpy(&handle->
buf[2], param, len);
239 l = handle->
uart_read(&out[point], out_len - point);
243 if (point >= out_len)
289 if (a_ch9120_write_read(handle, &cmd, 1, version, 1,
322 if (a_ch9120_write_check(handle, &cmd, 1,
358 if (a_ch9120_write_read(handle, &cmd, 1, ¶m, 1,
392 if (a_ch9120_write_check(handle, &cmd, 1,
425 if (a_ch9120_write_check(handle, &cmd, 1,
459 if (a_ch9120_write_check(handle, &cmd, 1,
494 if (a_ch9120_write_check(handle, cmd, 2,
529 if (a_ch9120_write_read(handle, &cmd, 1, ¶m, 1,
568 if (a_ch9120_write_check(handle, cmd, 5,
602 if (a_ch9120_write_read(handle, &cmd, 1, ip, 4,
640 if (a_ch9120_write_check(handle, cmd, 5,
674 if (a_ch9120_write_read(handle, &cmd, 1, mask, 4,
712 if (a_ch9120_write_check(handle, cmd, 5,
746 if (a_ch9120_write_read(handle, &cmd, 1, ip, 4,
780 cmd[1] = (num >> 0) & 0xFF;
781 cmd[2] = (num >> 8) & 0xFF;
782 if (a_ch9120_write_check(handle, cmd, 3,
818 if (a_ch9120_write_read(handle, &cmd, 1, buf, 2,
823 *num= (uint16_t)((uint16_t)buf[1] << 8 | buf[0]);
857 if (a_ch9120_write_check(handle, cmd, 5,
891 if (a_ch9120_write_read(handle, &cmd, 1, ip, 4,
926 cmd[1] = (num >> 0) & 0xFF;
927 cmd[2] = (num >> 8) & 0xFF;
928 if (a_ch9120_write_check(handle, cmd, 3,
963 if (a_ch9120_write_read(handle, &cmd, 1, buf, 2,
968 *num= (uint16_t)((uint16_t)buf[1] << 8 | buf[0]);
998 cmd[1] = (baud >> 0) & 0xFF;
999 cmd[2] = (baud >> 8) & 0xFF;
1000 cmd[3] = (baud >> 16) & 0xFF;
1001 cmd[4] = (baud >> 24) & 0xFF;
1002 if (a_ch9120_write_check(handle, cmd, 5,
1037 if (a_ch9120_write_read(handle, &cmd, 1, buf, 4,
1042 *baud = (uint32_t)(((uint32_t)buf[0] << 0) | ((uint32_t)buf[1] << 8) |
1043 ((uint32_t)buf[2] << 16) | ((uint32_t)buf[3] << 24));
1078 if (a_ch9120_write_check(handle, cmd, 4,
1115 if (a_ch9120_write_read(handle, &cmd, 1, buf, 3,
1156 if (a_ch9120_write_check(handle, cmd, 5,
1190 if (a_ch9120_write_read(handle, &cmd, 1, timeout, 1,
1221 *reg = (uint8_t)(ms / 5);
1279 if (a_ch9120_write_check(handle, cmd, 2,
1313 cmd[1] = (len >> 0) & 0xFF;
1314 cmd[2] = (len >> 8) & 0xFF;
1315 cmd[3] = (len >> 16) & 0xFF;
1316 cmd[4] = (len >> 24) & 0xFF;
1317 if (a_ch9120_write_check(handle, cmd, 5,
1352 if (a_ch9120_write_read(handle, &cmd, 1, buf, 4,
1357 *len = (uint32_t)(((uint32_t)buf[0] << 0) | ((uint32_t)buf[1] << 8) |
1358 ((uint32_t)buf[2] << 16) | ((uint32_t)buf[3] << 24));
1389 if (a_ch9120_write_check(handle, cmd, 2,
1424 if (a_ch9120_write_read(handle, &cmd, 1, ¶m, 1,
1460 if (a_ch9120_write_check(handle, cmd, 2,
1495 if (a_ch9120_write_read(handle, &cmd, 1, ¶m, 1,
1531 if (a_ch9120_write_check(handle, cmd, 2,
1565 handle->
debug_print(
"ch9120: uart_init is null.\n");
1571 handle->
debug_print(
"ch9120: uart_deinit is null.\n");
1577 handle->
debug_print(
"ch9120: uart_read is null.\n");
1583 handle->
debug_print(
"ch9120: uart_write is null.\n");
1589 handle->
debug_print(
"ch9120: uart_flush is null.\n");
1595 handle->
debug_print(
"ch9120: delay_ms is null.\n");
1601 handle->
debug_print(
"ch9120: reset_gpio_init is null.\n");
1607 handle->
debug_print(
"ch9120: reset_gpio_deinit is null.\n");
1613 handle->
debug_print(
"ch9120: reset_gpio_write is null.\n");
1619 handle->
debug_print(
"ch9120: cfg_gpio_init is null.\n");
1625 handle->
debug_print(
"ch9120: cfg_gpio_deinit is null.\n");
1631 handle->
debug_print(
"ch9120: cfg_gpio_write is null.\n");
1638 handle->
debug_print(
"ch9120: uart init failed.\n");
1644 handle->
debug_print(
"ch9120: reset gpio init failed.\n");
1651 handle->
debug_print(
"ch9120: cfg gpio init failed.\n");
1659 handle->
debug_print(
"ch9120: cfg gpio write failed.\n");
1669 handle->
debug_print(
"ch9120: cfg gpio write failed.\n");
1709 if (a_ch9120_write_check(handle, &cmd, 1,
1717 handle->
debug_print(
"ch9120: uart deinit failed.\n");
1723 handle->
debug_print(
"ch9120: reset gpio deinit failed.\n");
1729 handle->
debug_print(
"ch9120: cfg gpio deinit failed.\n");
1762 handle->
debug_print(
"ch9120: cfg gpio write failed.\n");
1768 handle->
debug_print(
"ch9120:uart write failed.\n");
1803 handle->
debug_print(
"ch9120: cfg gpio write failed.\n");
1830 uint8_t *param, uint16_t len,
1831 uint8_t *out, uint16_t out_len,
1832 uint16_t pre_delay, uint16_t timeout)
1843 if (a_ch9120_write_read(handle, param, len,
1845 pre_delay, timeout) != 0)
#define CH9120_CMD_GET_MODE
#define CH9120_CMD_GET_STATUS
#define CH9120_CMD_GET_LEN
#define CH9120_CMD_SET_DST_IP
#define CH9120_CMD_SET_GATEWAY
#define CH9120_CMD_GET_TIMEOUT
#define CH9120_CMD_SET_CONFIG
#define SUPPLY_VOLTAGE_MAX
#define CH9120_CMD_RANDOM_PORT
#define CH9120_CMD_GET_GATEWAY
#define CH9120_CMD_SET_TIMEOUT
#define CH9120_CMD_GET_NETMASK
#define CH9120_CMD_SET_NETMASK
#define CH9120_CMD_SET_MODE
#define CH9120_CMD_GET_DST_IP
#define CH9120_CMD_GET_FLUSH
#define CH9120_CMD_SET_FLUSH
#define CH9120_CMD_GET_DST_PORT
#define CH9120_CMD_SET_IP
#define CH9120_CMD_GET_BAUD
#define MANUFACTURER_NAME
#define SUPPLY_VOLTAGE_MIN
#define CH9120_CMD_SET_DST_PORT
#define CH9120_CMD_GET_DISCONNECT
#define CH9120_CMD_GET_CONFIG
#define CH9120_CMD_GET_PORT
#define CH9120_CMD_SAVE_TO_EEPROM
#define CH9120_CMD_SET_LEN
#define CHIP_NAME
chip information definition
#define CH9120_CMD_SET_DISCONNECT
#define CH9120_CMD_SET_PORT
#define CH9120_CMD_SET_BAUD
#define CH9120_CMD_GET_IP
#define CH9120_CMD_RUN_AND_RESET
#define CH9120_CMD_CHIP_VERSION
chip command definition
driver ch9120 header file
uint8_t ch9120_set_uart_baud(ch9120_handle_t *handle, uint32_t baud)
set uart baud
uint8_t ch9120_set_dest_ip(ch9120_handle_t *handle, uint8_t ip[4])
set dest ip
uint8_t ch9120_get_status(ch9120_handle_t *handle, ch9120_status_t *status)
get status
uint8_t ch9120_get_disconnect_with_no_rj45(ch9120_handle_t *handle, ch9120_bool_t *enable)
get disconnect with no rj45 status
uint8_t ch9120_get_gateway(ch9120_handle_t *handle, uint8_t ip[4])
get gateway
uint8_t ch9120_get_uart_baud(ch9120_handle_t *handle, uint32_t *baud)
get uart baud
uint8_t ch9120_get_dest_port(ch9120_handle_t *handle, uint16_t *num)
get dest port
struct ch9120_info_s ch9120_info_t
ch9120 information structure definition
uint8_t ch9120_get_uart_buffer_length(ch9120_handle_t *handle, uint32_t *len)
get uart buffer length
uint8_t ch9120_uart_timeout_convert_to_data(ch9120_handle_t *handle, uint8_t reg, uint16_t *ms)
convert the register raw data to the offset
uint8_t ch9120_init(ch9120_handle_t *handle)
initialize the chip
uint8_t ch9120_get_ip(ch9120_handle_t *handle, uint8_t ip[4])
get ip address
ch9120_mode_t
ch9120 mode enumeration definition
#define CH9120_UART_PRE_DELAY
ch9120 uart pre delay definition
struct ch9120_handle_s ch9120_handle_t
ch9120 handle structure definition
uint8_t ch9120_get_source_port(ch9120_handle_t *handle, uint16_t *num)
get source port
ch9120_parity_t
ch9120 parity enumeration definition
uint8_t ch9120_read(ch9120_handle_t *handle, uint8_t *buf, uint16_t *len)
read data
uint8_t ch9120_get_uart_timeout(ch9120_handle_t *handle, uint8_t *timeout)
get uart timeout
uint8_t ch9120_set_dest_port(ch9120_handle_t *handle, uint16_t num)
set dest port
uint8_t ch9120_reset(ch9120_handle_t *handle)
reset the chip
uint8_t ch9120_set_source_port_random(ch9120_handle_t *handle, ch9120_bool_t enable)
enable or disable random source port number
uint8_t ch9120_set_uart_config(ch9120_handle_t *handle, uint8_t data_bit, ch9120_parity_t parity, uint8_t stop_bit)
set uart config
uint8_t ch9120_set_uart_buffer_length(ch9120_handle_t *handle, uint32_t len)
set uart buffer length
uint8_t ch9120_set_uart_flush(ch9120_handle_t *handle, ch9120_bool_t enable)
enable or disable uart auto flush
uint8_t ch9120_get_dest_ip(ch9120_handle_t *handle, uint8_t ip[4])
get dest ip
uint8_t ch9120_deinit(ch9120_handle_t *handle)
close the chip
uint8_t ch9120_get_uart_flush(ch9120_handle_t *handle, ch9120_bool_t *enable)
get uart auto flush status
uint8_t ch9120_set_gateway(ch9120_handle_t *handle, uint8_t ip[4])
set gateway
uint8_t ch9120_config_and_reset(ch9120_handle_t *handle)
config and reset the chip
uint8_t ch9120_set_uart_timeout(ch9120_handle_t *handle, uint8_t timeout)
set uart timeout
uint8_t ch9120_get_uart_config(ch9120_handle_t *handle, uint8_t *data_bit, ch9120_parity_t *parity, uint8_t *stop_bit)
get uart config
uint8_t ch9120_exit(ch9120_handle_t *handle)
exit
uint8_t ch9120_get_mode(ch9120_handle_t *handle, ch9120_mode_t *mode)
get mode
uint8_t ch9120_set_disconnect_with_no_rj45(ch9120_handle_t *handle, ch9120_bool_t enable)
enable or disable disconnect with no rj45
uint8_t ch9120_info(ch9120_info_t *info)
get chip's information
uint8_t ch9120_set_mode(ch9120_handle_t *handle, ch9120_mode_t mode)
set mode
uint8_t ch9120_get_subnet_mask(ch9120_handle_t *handle, uint8_t mask[4])
get subnet mask
uint8_t ch9120_uart_timeout_convert_to_register(ch9120_handle_t *handle, uint16_t ms, uint8_t *reg)
convert the uart timeout to the register raw data
uint8_t ch9120_set_dhcp(ch9120_handle_t *handle, ch9120_bool_t enable)
enable or disable dhcp
ch9120_bool_t
ch9120 bool enumeration definition
uint8_t ch9120_save_to_eeprom(ch9120_handle_t *handle)
save to eeprom
uint8_t ch9120_set_subnet_mask(ch9120_handle_t *handle, uint8_t mask[4])
set subnet mask
ch9120_status_t
ch9120 status enumeration definition
uint8_t ch9120_set_ip(ch9120_handle_t *handle, uint8_t ip[4])
set ip address
uint8_t ch9120_write(ch9120_handle_t *handle, uint8_t *buf, uint16_t len)
write data
uint8_t ch9120_get_version(ch9120_handle_t *handle, uint8_t *version)
get version
uint8_t ch9120_set_source_port(ch9120_handle_t *handle, uint16_t num)
set source port
uint8_t ch9120_set_command(ch9120_handle_t *handle, uint8_t *param, uint16_t len, uint8_t *out, uint16_t out_len, uint16_t pre_delay, uint16_t timeout)
set command
uint8_t(* uart_flush)(void)
uint8_t(* cfg_gpio_write)(uint8_t data)
uint8_t(* uart_write)(uint8_t *buf, uint16_t len)
void(* delay_ms)(uint32_t ms)
uint8_t(* cfg_gpio_init)(void)
uint8_t(* uart_deinit)(void)
uint8_t(* reset_gpio_deinit)(void)
void(* debug_print)(const char *const fmt,...)
uint16_t(* uart_read)(uint8_t *buf, uint16_t len)
uint8_t(* reset_gpio_init)(void)
uint8_t(* uart_init)(void)
uint8_t(* reset_gpio_write)(uint8_t data)
uint8_t(* cfg_gpio_deinit)(void)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v