0

我正在尝试访问嵌入式板上 ULPI 收发器芯片的一些寄存器。我发现我对特定芯片的读取操作结果为零。我可以毫无问题地访问它上面的内存区域。

这些到区域之间的唯一区别是第一个区域(我可以读取)具有 32 位地址,而第二个区域(我无法读取)具有 8 位地址。

root@FX7500000000:/tmp# ./devmem 0x48062000 //this is 32 bit address range and I am able to read.
/dev/mem opened.
Memory mapped at address 0x40023000.
Value at address 0x48062000 (0x40023000): 0x15
root@FX7500000000:/tmp# ./devmem 0x48062010
/dev/mem opened.
Memory mapped at address 0x40023000.
Value at address 0x48062010 (0x40023010): 0x115
root@FX7500000000:/tmp# ./devmem 0x48062014
/dev/mem opened.
Memory mapped at address 0x40023000.
Value at address 0x48062014 (0x40023014): 0x1
root@FX7500000000:/tmp# ./devmem 0x48062018
/dev/mem opened.
Memory mapped at address 0x40023000.
Value at address 0x48062018 (0x40023018): 0x4
root@FX7500000000:/tmp# ./devmem 0x4806201c
/dev/mem opened.
Memory mapped at address 0x40023000.
Value at address 0x4806201C (0x4002301c): 0x0
root@FX7500000000:/tmp# ./devmem 0x4806203c
/dev/mem opened.
Memory mapped at address 0x40023000.
Value at address 0x4806203C (0x4002303c): 0x0
root@FX7500000000:/tmp# ./devmem 0x48062030
/dev/mem opened.
Memory mapped at address 0x40023000.
Value at address 0x48062030 (0x40023030): 0x64
root@FX7500000000:/tmp# ./devmem 0x48062040
/dev/mem opened.
Memory mapped at address 0x40023000.
**Value at address 0x48062040 (0x40023040): 0x6D8** //I am find until here. 
root@FX7500000000:/tmp# ./devmem 0x48062800
/dev/mem opened.
Memory mapped at address 0x40023000.
Value at address 0x48062800 (0x40023800): 0x0
root@FX7500000000:/tmp# ./devmem 0x48062800 b // I also specified I need to read a byte value
/dev/mem opened.
**Memory mapped at address 0x40023000.
Value at address 0x48062800 (0x40023800): 0x0**

我尝试了相同的不同读取操作,即从内核空间读取,但结果是一样的吗?我需要为这个地区做些特别的事情吗?我阅读了技术参考手册,但没有明确的弹出窗口。

http://www.ti.com/litv/pdf/sprugr0b

以下是 TRM 手册的相关部分。

注意事项 关于通过 L4-Core 互连访问 ULPI PHY 侧寄存器:ULPI 寄存器是字节大小的,并且只能以该大小访问。尝试使用任何其他数据大小(16 位或 32 位)通过 L4 核心互连访问它们将完成而不会出现错误(或任何其他警告),但会导致未定义的行为。以下情况可能会导致问题:

  • 如果软件将 ULPI 寄存器内容定义为静态(非易失性),则缓存更新可能会导致 32 位访问突发,从而产生不良后果。
  • 一些寄存器具有相邻的覆盖、设置和清除地址。过大的写访问可能会清除和设置相同的位,这可能会产生多种结果。
  • 某些寄存器在读取时会被清除:对相邻内存位置的过大读取访问可能会导致不需要的清除。

表 20-109。USBTLL 寄存器映射汇总(L4-Core 互连寄存器空间)

Register Width
Register Name Type (Bits) Address Offset Physical Address Section
USBTLL_REVISION R 32 0x0000 0000 0x4806 2000 Section 20.2.6.4.1
USBTLL_SYSCONFIG RW 32 0x0000 0010 0x4806 2010 Section 20.2.6.4.2
USBTLL_SYSSTATUS R 32 0x0000 0014 0x4806 2014 Section 20.2.6.4.3
USBTLL_IRQSTATUS RW 32 0x0000 0018 0x4806 2018 Section 20.2.6.4.4
USBTLL_IRQENABLE RW 32 0x0000 001C 0x4806 201C Section 20.2.6.4.5
TLL_SHARED_CONF RW 32 0x0000 0030 0x4806 2030 Section 20.2.6.4.6
TLL_CHANNEL_CONF_i (1) RW 32 0x0000 0040 + 0x4806 2040 + Section 20.2.6.4.7
(0x04 x I) (0x04 x I)
ULPI_VENDOR_ID_LO_i (1) R 8 0x0000 0800 + 0x4806 2800 + Section 20.2.6.4.8
(0x100 x I) (0x100 x I)
ULPI_VENDOR_ID_HI_i (1) R 8 0x0000 0001 + 0x4806 2801 + Section 20.2.6.4.9
(0x100 x I) (0x100 x I)
ULPI_PRODUCT_ID_LO_i (1) R 8 0x0000 0002 + 0x4806 2802 + Section
(0x100 x I) (0x100 x I) 20.2.6.4.10
ULPI_PRODUCT_ID_HI_i (1) R 8 0x0000 0003 + 0x4806 2803 + Section
(0x100 x I) (0x100 x I) 20.2.6.4.11
ULPI_FUNCTION_CTRL_i (1) RW 8 0x0000 0004 + 0x4806 2804 + Section
(0x100 x I) (0x100 x I) 20.2.6.4.12
ULPI_FUNCTION_CTRL_SET_i (1) RW 8 0x0000 0005 + 0x4806 2805 + Section
(0x100 x I) (0x100 x I) 20.2.6.4.13
ULPI_FUNCTION_CTRL_CLR_i (1) RW 8 0x0000 0006 + 0x4806 2806 + Section
(0x100 x I) (0x100 x I) 20.2.6.4.14
ULPI_INTERFACE_CTRL_i (1) RW 8 0x0000 0007 + 0x4806 2807 + Section
(0x100 x I) (0x100 x I) 20.2.6.4.15
ULPI_INTERFACE_CTRL_SET_i (1) RW 8 0x0000 0008 + 0x4806 2808 + Section
(0x100 x I) (0x100 x I) 20.2.6.4.16

我会很感激你的回复。

4

0 回答 0