UART读数据出现分包情况怎么解决?

应用情况:ESP32C3与IMX6ULL(Linux系统)进行串口通信。

具体描述:当ESP32C3发送包大于128字节时IMX6ULL的读取会出现分包情况,问题原因查到是ESP32C3的发送缓存buffer默认是128字节,两个串口共享512字节。但是ESP32的开发者进行缓存调整后仍然是128字节出现分包。

问题:想问从Linux系统这里怎么解决这个分包问题?
下面是接收函数:

//读串口
int32_t sdk_uart_read(sdk_uart_t *p_uart, int8_t *buf, uint32_t buf_len, uint32_t timeout_ms)
{
    int32_t len=-1;
	fd_set rd_set;
	struct timeval	time_out;

	time_out.tv_sec=0;//秒
	time_out.tv_usec=(time_t)timeout_ms*1000;//微秒

	FD_ZERO(&rd_set); //每次循环都要清空集合,否则不能检测描述符变化  
	FD_SET(p_uart->fd,&rd_set); //添加描述符 

	switch(select(p_uart->fd+1,&rd_set,NULL,NULL,&time_out))
	{  
		case -1: 
			printf("select failure:%s\n",strerror(errno));
			return -1;  
		case 0:
			//printf("select timeout_ms\n");
			return -1;
		default: 
			if(FD_ISSET(p_uart->fd, &rd_set))	//测试句柄是否可写
			{
				if((len=read(p_uart->fd, buf, buf_len))<0)
				{
					printf("read from serial port failure:%s\n",strerror(errno));
					return -1;
				}
			}
	}

	return len;
}