test_usbh.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. * Copyright (c) 2022-2024, Xiaohua Semiconductor Co., Ltd.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2024-12-30 CDT first version
  9. */
  10. #include <rtthread.h>
  11. #include <rtdevice.h>
  12. #if defined(RT_USING_USB_HOST)
  13. #ifdef RT_USBH_MSTORAGE
  14. /* menuconfig:
  15. 1. Hardware Drivers Config ---> On-Chip Peripheral Drivers ---> Enable USB --->
  16. Select USB Mode (USB Host Mode)
  17. [*] Enable Udisk Drivers -->
  18. (/) Udisk mount dir
  19. 2. RT-Thread Components ---> DFS: device virtual files system --->
  20. ......
  21. [*] Enable elm0chan fatfs
  22. ......
  23. 3.如果命令执行不成功,需参考对应Board目录下的README.md文件(注意事项中的USB Host部分)
  24. */
  25. /*
  26. * 程序清单:这是一个 usb host 读写U盘 使用例程
  27. * 例程导出了 usbh_readwrite 命令到控制终端
  28. * 命令调用格式:usbh_readwrite
  29. * 软件:串口助手
  30. * 程序功能:MSH命令发送 usbh_readwrite,运行测试程序。通过文件系统的命令查看写入的文件,并进行读写删除等操作。
  31. *
  32. */
  33. #include <unistd.h>
  34. #include <fcntl.h>
  35. #define TEST_FN "/test_usbh.c"
  36. static char test_data[120], buffer[120];
  37. void usbh_readwrite(const char *filename)
  38. {
  39. int fd;
  40. int index, length;
  41. fd = open(TEST_FN, O_WRONLY | O_CREAT | O_TRUNC, 0);
  42. if (fd < 0)
  43. {
  44. rt_kprintf("open file for write failed\n");
  45. return;
  46. }
  47. for (index = 0; index < sizeof(test_data); index ++)
  48. {
  49. test_data[index] = index + 27;
  50. }
  51. length = write(fd, test_data, sizeof(test_data));
  52. if (length != sizeof(test_data))
  53. {
  54. rt_kprintf("write data failed\n");
  55. close(fd);
  56. return;
  57. }
  58. close(fd);
  59. fd = open(TEST_FN, O_RDONLY, 0);
  60. if (fd < 0)
  61. {
  62. rt_kprintf("check: open file for read failed\n");
  63. return;
  64. }
  65. length = read(fd, buffer, sizeof(buffer));
  66. if (length != sizeof(buffer))
  67. {
  68. rt_kprintf("check: read file failed\n");
  69. close(fd);
  70. return;
  71. }
  72. for (index = 0; index < sizeof(test_data); index ++)
  73. {
  74. if (test_data[index] != buffer[index])
  75. {
  76. rt_kprintf("check: check data failed at %d\n", index);
  77. close(fd);
  78. return;
  79. }
  80. }
  81. rt_kprintf("usb host read/write udisk successful\r\n");
  82. close(fd);
  83. }
  84. MSH_CMD_EXPORT(usbh_readwrite, usb host read write test);
  85. #endif /* RT_USBH_MSTORAGE */
  86. #ifdef RT_USBH_HID
  87. #endif /* RT_USBH_HID */
  88. #ifdef RT_USBH_HID_MOUSE
  89. #endif /* RT_USBH_HID_MOUSE */
  90. #ifdef RT_USBH_HID_KEYBOARD
  91. #endif /* RT_USBH_HID_KEYBOARD */
  92. #endif /* RT_USING_USB_HOST */